html-validate-vue 9.2.0 → 9.3.1

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 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 | 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-slot-shorthand` | Error | Prefers the usage of `#foo` over `v-slot:foo`. |
60
- | `vue/required-slots` | Error | Validate required slots. Required slots must be used. |
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
 
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  // src/index.ts
4
- var import_html_validate8 = require("html-validate");
4
+ var import_html_validate9 = require("html-validate");
5
5
 
6
6
  // package.json
7
7
  var name = "html-validate-vue";
@@ -36,7 +36,9 @@ var elements_default = (0, import_html_validate.defineMetadata)({
36
36
  attributes: {
37
37
  is: {
38
38
  required: true
39
- }
39
+ },
40
+ /* <component> can handle arbitrary props */
41
+ "*": {}
40
42
  }
41
43
  },
42
44
  "keep-alive": {
@@ -243,6 +245,7 @@ function createConfig() {
243
245
  "no-self-closing": "off",
244
246
  /* enable rules from this plugin */
245
247
  "vue/available-slots": "error",
248
+ "vue/prefer-boolean-shorthand": "error",
246
249
  "vue/prefer-slot-shorthand": "error",
247
250
  "vue/required-slots": "error"
248
251
  }
@@ -403,8 +406,40 @@ var DeprecatedSlot = class extends import_html_validate3.Rule {
403
406
  }
404
407
  };
405
408
 
406
- // src/rules/prefer-slot-shorthand.ts
409
+ // src/rules/prefer-boolean-shorthand.ts
407
410
  var import_html_validate4 = require("html-validate");
411
+ var PreferBooleanShorthand = class extends import_html_validate4.Rule {
412
+ documentation(context) {
413
+ const { prop, originalAttribute } = context;
414
+ return {
415
+ description: [
416
+ `Use \`${prop}\` instead of \`${originalAttribute}="true"\`.`,
417
+ "",
418
+ `The \`${prop}\` prop is declared as a boolean. Vue.js allows omitting the value for boolean props, so \`${prop}\` is equivalent to \`${originalAttribute}="true"\`.`
419
+ ].join("\n")
420
+ };
421
+ }
422
+ setup() {
423
+ this.on("attr", (event) => {
424
+ const { key, value, meta, originalAttribute, target, location } = event;
425
+ if (!originalAttribute) {
426
+ return;
427
+ }
428
+ if (!meta?.boolean) {
429
+ return;
430
+ }
431
+ if (!(value instanceof import_html_validate4.DynamicValue) || value.expr !== "true") {
432
+ return;
433
+ }
434
+ const context = { prop: key, originalAttribute };
435
+ const message = `Use "${key}" instead of "${originalAttribute}="true""`;
436
+ this.report(target, message, location, context);
437
+ });
438
+ }
439
+ };
440
+
441
+ // src/rules/prefer-slot-shorthand.ts
442
+ var import_html_validate5 = require("html-validate");
408
443
  var prefix = "v-slot:";
409
444
  function isVSlot(attr) {
410
445
  if (!attr.startsWith(prefix)) {
@@ -423,7 +458,7 @@ function isDeprecatedSlot(attr, value) {
423
458
  if (attr !== "slot") {
424
459
  return null;
425
460
  }
426
- if (value instanceof import_html_validate4.DynamicValue) {
461
+ if (value instanceof import_html_validate5.DynamicValue) {
427
462
  return null;
428
463
  }
429
464
  if (value === null || value === "") {
@@ -431,7 +466,7 @@ function isDeprecatedSlot(attr, value) {
431
466
  }
432
467
  return value;
433
468
  }
434
- var PreferSlotShorthand = class extends import_html_validate4.Rule {
469
+ var PreferSlotShorthand = class extends import_html_validate5.Rule {
435
470
  documentation(context) {
436
471
  const slot = context?.slot ?? "my-slot";
437
472
  return {
@@ -463,7 +498,7 @@ var PreferSlotShorthand = class extends import_html_validate4.Rule {
463
498
  };
464
499
 
465
500
  // src/rules/required-slots.ts
466
- var import_html_validate5 = require("html-validate");
501
+ var import_html_validate6 = require("html-validate");
467
502
  function difference2(a, b) {
468
503
  const result = new Set(a);
469
504
  for (const elem of b) {
@@ -471,7 +506,7 @@ function difference2(a, b) {
471
506
  }
472
507
  return result;
473
508
  }
474
- var RequiredSlots = class extends import_html_validate5.Rule {
509
+ var RequiredSlots = class extends import_html_validate6.Rule {
475
510
  documentation(context) {
476
511
  if (context) {
477
512
  return {
@@ -490,7 +525,7 @@ var RequiredSlots = class extends import_html_validate5.Rule {
490
525
  setup() {
491
526
  this.on("dom:ready", (event) => {
492
527
  const doc = event.document;
493
- import_html_validate5.walk.depthFirst(doc, (node) => {
528
+ import_html_validate6.walk.depthFirst(doc, (node) => {
494
529
  const meta = node.meta;
495
530
  if (!meta?.requiredSlots) {
496
531
  return;
@@ -524,6 +559,7 @@ var RequiredSlots = class extends import_html_validate5.Rule {
524
559
  var rules = {
525
560
  "vue/available-slots": AvailableSlots,
526
561
  "vue/deprecated-slot": DeprecatedSlot,
562
+ "vue/prefer-boolean-shorthand": PreferBooleanShorthand,
527
563
  "vue/prefer-slot-shorthand": PreferSlotShorthand,
528
564
  "vue/required-slots": RequiredSlots
529
565
  };
@@ -560,7 +596,7 @@ var schema_default = {
560
596
  };
561
597
 
562
598
  // src/hooks/attribute.ts
563
- var import_html_validate6 = require("html-validate");
599
+ var import_html_validate7 = require("html-validate");
564
600
  function* processAttribute(attr) {
565
601
  yield attr;
566
602
  const bind = /^(?:v-bind)?:(.*)$/.exec(attr.key);
@@ -569,14 +605,14 @@ function* processAttribute(attr) {
569
605
  yield {
570
606
  ...attr,
571
607
  key,
572
- value: new import_html_validate6.DynamicValue(attr.value ? String(attr.value) : ""),
608
+ value: new import_html_validate7.DynamicValue(attr.value ? String(attr.value) : ""),
573
609
  originalAttribute: attr.key
574
610
  };
575
611
  }
576
612
  }
577
613
 
578
614
  // src/hooks/element.ts
579
- var import_html_validate7 = require("html-validate");
615
+ var import_html_validate8 = require("html-validate");
580
616
  function isBound(node) {
581
617
  return node.hasAttribute("v-html");
582
618
  }
@@ -636,7 +672,7 @@ function processElement(node) {
636
672
  node.meta.templateRoot = false;
637
673
  }
638
674
  if (isBound(node) || isSlot(node)) {
639
- node.appendText(new import_html_validate7.DynamicValue(""), node.location);
675
+ node.appendText(new import_html_validate8.DynamicValue(""), node.location);
640
676
  }
641
677
  }
642
678
 
@@ -752,7 +788,7 @@ var transform_default = transformer;
752
788
 
753
789
  // src/index.ts
754
790
  var range = peerDependencies["html-validate"];
755
- (0, import_html_validate8.compatibilityCheck)(name, range);
791
+ (0, import_html_validate9.compatibilityCheck)(name, range);
756
792
  var plugin = {
757
793
  name,
758
794
  configs: configs_default,
@@ -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.3.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\t/* <component> can handle arbitrary props */\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": "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",
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
  }
@@ -34,7 +34,9 @@ var elements_default = defineMetadata({
34
34
  attributes: {
35
35
  is: {
36
36
  required: true
37
- }
37
+ },
38
+ /* <component> can handle arbitrary props */
39
+ "*": {}
38
40
  }
39
41
  },
40
42
  "keep-alive": {
@@ -241,6 +243,7 @@ function createConfig() {
241
243
  "no-self-closing": "off",
242
244
  /* enable rules from this plugin */
243
245
  "vue/available-slots": "error",
246
+ "vue/prefer-boolean-shorthand": "error",
244
247
  "vue/prefer-slot-shorthand": "error",
245
248
  "vue/required-slots": "error"
246
249
  }
@@ -407,8 +410,40 @@ var DeprecatedSlot = class extends Rule2 {
407
410
  }
408
411
  };
409
412
 
410
- // src/rules/prefer-slot-shorthand.ts
413
+ // src/rules/prefer-boolean-shorthand.ts
411
414
  import { DynamicValue, Rule as Rule3 } from "html-validate";
415
+ var PreferBooleanShorthand = class extends Rule3 {
416
+ documentation(context) {
417
+ const { prop, originalAttribute } = context;
418
+ return {
419
+ description: [
420
+ `Use \`${prop}\` instead of \`${originalAttribute}="true"\`.`,
421
+ "",
422
+ `The \`${prop}\` prop is declared as a boolean. Vue.js allows omitting the value for boolean props, so \`${prop}\` is equivalent to \`${originalAttribute}="true"\`.`
423
+ ].join("\n")
424
+ };
425
+ }
426
+ setup() {
427
+ this.on("attr", (event) => {
428
+ const { key, value, meta, originalAttribute, target, location } = event;
429
+ if (!originalAttribute) {
430
+ return;
431
+ }
432
+ if (!meta?.boolean) {
433
+ return;
434
+ }
435
+ if (!(value instanceof DynamicValue) || value.expr !== "true") {
436
+ return;
437
+ }
438
+ const context = { prop: key, originalAttribute };
439
+ const message = `Use "${key}" instead of "${originalAttribute}="true""`;
440
+ this.report(target, message, location, context);
441
+ });
442
+ }
443
+ };
444
+
445
+ // src/rules/prefer-slot-shorthand.ts
446
+ import { DynamicValue as DynamicValue2, Rule as Rule4 } from "html-validate";
412
447
  var prefix = "v-slot:";
413
448
  function isVSlot(attr) {
414
449
  if (!attr.startsWith(prefix)) {
@@ -427,7 +462,7 @@ function isDeprecatedSlot(attr, value) {
427
462
  if (attr !== "slot") {
428
463
  return null;
429
464
  }
430
- if (value instanceof DynamicValue) {
465
+ if (value instanceof DynamicValue2) {
431
466
  return null;
432
467
  }
433
468
  if (value === null || value === "") {
@@ -435,7 +470,7 @@ function isDeprecatedSlot(attr, value) {
435
470
  }
436
471
  return value;
437
472
  }
438
- var PreferSlotShorthand = class extends Rule3 {
473
+ var PreferSlotShorthand = class extends Rule4 {
439
474
  documentation(context) {
440
475
  const slot = context?.slot ?? "my-slot";
441
476
  return {
@@ -468,7 +503,7 @@ var PreferSlotShorthand = class extends Rule3 {
468
503
 
469
504
  // src/rules/required-slots.ts
470
505
  import {
471
- Rule as Rule4,
506
+ Rule as Rule5,
472
507
  walk as walk3
473
508
  } from "html-validate";
474
509
  function difference2(a, b) {
@@ -478,7 +513,7 @@ function difference2(a, b) {
478
513
  }
479
514
  return result;
480
515
  }
481
- var RequiredSlots = class extends Rule4 {
516
+ var RequiredSlots = class extends Rule5 {
482
517
  documentation(context) {
483
518
  if (context) {
484
519
  return {
@@ -531,6 +566,7 @@ var RequiredSlots = class extends Rule4 {
531
566
  var rules = {
532
567
  "vue/available-slots": AvailableSlots,
533
568
  "vue/deprecated-slot": DeprecatedSlot,
569
+ "vue/prefer-boolean-shorthand": PreferBooleanShorthand,
534
570
  "vue/prefer-slot-shorthand": PreferSlotShorthand,
535
571
  "vue/required-slots": RequiredSlots
536
572
  };
@@ -567,7 +603,7 @@ var schema_default = {
567
603
  };
568
604
 
569
605
  // src/hooks/attribute.ts
570
- import { DynamicValue as DynamicValue2 } from "html-validate";
606
+ import { DynamicValue as DynamicValue3 } from "html-validate";
571
607
  function* processAttribute(attr) {
572
608
  yield attr;
573
609
  const bind = /^(?:v-bind)?:(.*)$/.exec(attr.key);
@@ -576,7 +612,7 @@ function* processAttribute(attr) {
576
612
  yield {
577
613
  ...attr,
578
614
  key,
579
- value: new DynamicValue2(attr.value ? String(attr.value) : ""),
615
+ value: new DynamicValue3(attr.value ? String(attr.value) : ""),
580
616
  originalAttribute: attr.key
581
617
  };
582
618
  }
@@ -584,7 +620,7 @@ function* processAttribute(attr) {
584
620
 
585
621
  // src/hooks/element.ts
586
622
  import {
587
- DynamicValue as DynamicValue3
623
+ DynamicValue as DynamicValue4
588
624
  } from "html-validate";
589
625
  function isBound(node) {
590
626
  return node.hasAttribute("v-html");
@@ -645,7 +681,7 @@ function processElement(node) {
645
681
  node.meta.templateRoot = false;
646
682
  }
647
683
  if (isBound(node) || isSlot(node)) {
648
- node.appendText(new DynamicValue3(""), node.location);
684
+ node.appendText(new DynamicValue4(""), node.location);
649
685
  }
650
686
  }
651
687
 
@@ -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.3.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\t/* <component> can handle arbitrary props */\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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "html-validate-vue",
3
- "version": "9.2.0",
3
+ "version": "9.3.1",
4
4
  "description": "vue transform for html-validate",
5
5
  "keywords": [
6
6
  "html",