html-validate-vue 7.4.2 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -99,7 +99,7 @@ var import_html_validate2 = require("html-validate");
99
99
 
100
100
  // src/utils/strip-templating.ts
101
101
  function stripTemplating(str) {
102
- return str.replace(/{{(.*?)}}/g, (_, m) => {
102
+ return str.replaceAll(/{{(.*?)}}/g, (_, m) => {
103
103
  const filler = " ".repeat(m.length);
104
104
  return `{{${filler}}}`;
105
105
  });
@@ -252,7 +252,7 @@ function isVSlot(attr) {
252
252
  return null;
253
253
  }
254
254
  const slot = attr.slice(prefix.length);
255
- if (/^\[.*\]$/.exec(slot)) {
255
+ if (/^\[.*]$/.test(slot)) {
256
256
  return null;
257
257
  }
258
258
  return slot;
@@ -541,7 +541,7 @@ function* transformSFC(source) {
541
541
  while ((match = sfc.exec(source.data)) !== null) {
542
542
  const attr = match[2] ?? "";
543
543
  const data = `${match[1]}${match[3]}${match[4]}`;
544
- if (!/lang=".*?"/.exec(attr)) {
544
+ if (!/lang=".*?"/.test(attr)) {
545
545
  const [line, column] = findLocation(source.data, match.index, 0);
546
546
  yield {
547
547
  data: stripTemplating(data),
@@ -562,10 +562,10 @@ transformSFC.api = 1;
562
562
 
563
563
  // src/transform/auto.transform.ts
564
564
  function isVue(source) {
565
- return !!/\.vue$/i.exec(source.filename);
565
+ return /\.vue$/i.test(source.filename);
566
566
  }
567
567
  function isJavascript(source) {
568
- return !!/\.(jsx?|tsx?)$/i.exec(source.filename);
568
+ return /\.(jsx?|tsx?)$/i.test(source.filename);
569
569
  }
570
570
  function* autodetect(source) {
571
571
  if (isVue(source)) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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\": \"7.4.1\",\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\": \"2.2.0\",\n \"semver\": \"7.7.4\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"0.18.2\",\n \"@html-validate/commitlint-config\": \"3.6.5\",\n \"@html-validate/eslint-config\": \"6.14.0\",\n \"@html-validate/eslint-config-jest\": \"6.14.0\",\n \"@html-validate/eslint-config-typescript\": \"6.14.0\",\n \"@html-validate/eslint-config-typescript-typeinfo\": \"6.14.0\",\n \"@html-validate/jest-config\": \"3.13.1\",\n \"@html-validate/prettier-config\": \"3.1.15\",\n \"@html-validate/release-scripts\": \"7.1.0\",\n \"@tsconfig/node18\": \"18.2.6\",\n \"@tsconfig/strictest\": \"2.0.8\",\n \"@types/estree\": \"1.0.8\",\n \"@types/jest\": \"30.0.0\",\n \"@types/node\": \"18.19.130\",\n \"@types/semver\": \"7.7.1\",\n \"dts-bundle-generator\": \"9.5.1\",\n \"esbuild\": \"0.27.3\",\n \"html-validate\": \"10.7.0\",\n \"husky\": \"9.1.7\",\n \"jest\": \"30.2.0\",\n \"jest-environment-jsdom\": \"30.2.0\",\n \"npm-pkg-lint\": \"4.3.4\",\n \"npm-run-all2\": \"8.0.4\",\n \"ts-jest\": \"29.4.6\",\n \"typescript\": \"5.9.3\"\n },\n \"peerDependencies\": {\n \"html-validate\": \"^8.21.0 || ^9.0.0 || ^10.0.0\"\n },\n \"engines\": {\n \"node\": \">= 18.0\"\n },\n \"externalDependencies\": [\n \"@html-validate/plugin-utils\"\n ]\n}\n", "import { defineMetadata } from \"html-validate\";\n\nexport default defineMetadata({\n\tcomponent: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tcomponent: \"is\",\n\t\trequiredAttributes: [\"is\"],\n\t},\n\n\t\"keep-alive\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\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},\n\n\t\"router-view\": {\n\t\tflow: true,\n\t\tslots: [\"default\"],\n\t},\n\n\tslot: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tscriptSupporting: true,\n\t},\n\n\tsuspense: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tslots: [\"default\", \"fallback\"],\n\t},\n\n\tteleport: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t},\n\n\ttransition: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\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},\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\ninterface Context {\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<Context> {\n\tpublic override documentation(context?: Context): 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: Context = {\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.replace(/{{(.*?)}}/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\ninterface 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 (/^\\[.*\\]$/.exec(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\ninterface Context {\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<Context> {\n\tpublic override documentation(context?: Context): 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: Context = {\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=\".*?\"/.exec(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.exec(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.exec(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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",
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\": \"8.0.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\": \"3.0.0\",\n \"semver\": \"7.7.4\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"0.18.2\",\n \"@html-validate/commitlint-config\": \"3.6.7\",\n \"@html-validate/eslint-config\": \"6.17.3\",\n \"@html-validate/eslint-config-jest\": \"6.17.0\",\n \"@html-validate/eslint-config-typescript\": \"6.17.0\",\n \"@html-validate/eslint-config-typescript-typeinfo\": \"6.17.0\",\n \"@html-validate/jest-config\": \"3.13.1\",\n \"@html-validate/prettier-config\": \"3.1.15\",\n \"@html-validate/release-scripts\": \"7.1.0\",\n \"@tsconfig/node20\": \"20.1.9\",\n \"@tsconfig/strictest\": \"2.0.8\",\n \"@types/estree\": \"1.0.8\",\n \"@types/jest\": \"30.0.0\",\n \"@types/node\": \"20.19.35\",\n \"@types/semver\": \"7.7.1\",\n \"dts-bundle-generator\": \"9.5.1\",\n \"esbuild\": \"0.27.3\",\n \"html-validate\": \"10.9.0\",\n \"husky\": \"9.1.7\",\n \"jest\": \"30.2.0\",\n \"jest-environment-jsdom\": \"30.2.0\",\n \"npm-pkg-lint\": \"4.4.0\",\n \"npm-run-all2\": \"8.0.4\",\n \"ts-jest\": \"29.4.6\",\n \"typescript\": \"5.9.3\"\n },\n \"peerDependencies\": {\n \"html-validate\": \"^8.21.0 || ^9.0.0 || ^10.0.0\"\n },\n \"engines\": {\n \"node\": \"^20.11 || >= 22.16\"\n },\n \"externalDependencies\": [\n \"@html-validate/plugin-utils\"\n ]\n}\n", "import { defineMetadata } from \"html-validate\";\n\nexport default defineMetadata({\n\tcomponent: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tcomponent: \"is\",\n\t\trequiredAttributes: [\"is\"],\n\t},\n\n\t\"keep-alive\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\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},\n\n\t\"router-view\": {\n\t\tflow: true,\n\t\tslots: [\"default\"],\n\t},\n\n\tslot: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tscriptSupporting: true,\n\t},\n\n\tsuspense: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tslots: [\"default\", \"fallback\"],\n\t},\n\n\tteleport: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t},\n\n\ttransition: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\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},\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\ninterface Context {\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<Context> {\n\tpublic override documentation(context?: Context): 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: Context = {\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\ninterface 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\ninterface Context {\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<Context> {\n\tpublic override documentation(context?: Context): 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: Context = {\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
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"]
7
7
  }
@@ -100,7 +100,7 @@ import {
100
100
 
101
101
  // src/utils/strip-templating.ts
102
102
  function stripTemplating(str) {
103
- return str.replace(/{{(.*?)}}/g, (_, m) => {
103
+ return str.replaceAll(/{{(.*?)}}/g, (_, m) => {
104
104
  const filler = " ".repeat(m.length);
105
105
  return `{{${filler}}}`;
106
106
  });
@@ -256,7 +256,7 @@ function isVSlot(attr) {
256
256
  return null;
257
257
  }
258
258
  const slot = attr.slice(prefix.length);
259
- if (/^\[.*\]$/.exec(slot)) {
259
+ if (/^\[.*]$/.test(slot)) {
260
260
  return null;
261
261
  }
262
262
  return slot;
@@ -550,7 +550,7 @@ function* transformSFC(source) {
550
550
  while ((match = sfc.exec(source.data)) !== null) {
551
551
  const attr = match[2] ?? "";
552
552
  const data = `${match[1]}${match[3]}${match[4]}`;
553
- if (!/lang=".*?"/.exec(attr)) {
553
+ if (!/lang=".*?"/.test(attr)) {
554
554
  const [line, column] = findLocation(source.data, match.index, 0);
555
555
  yield {
556
556
  data: stripTemplating(data),
@@ -571,10 +571,10 @@ transformSFC.api = 1;
571
571
 
572
572
  // src/transform/auto.transform.ts
573
573
  function isVue(source) {
574
- return !!/\.vue$/i.exec(source.filename);
574
+ return /\.vue$/i.test(source.filename);
575
575
  }
576
576
  function isJavascript(source) {
577
- return !!/\.(jsx?|tsx?)$/i.exec(source.filename);
577
+ return /\.(jsx?|tsx?)$/i.test(source.filename);
578
578
  }
579
579
  function* autodetect(source) {
580
580
  if (isVue(source)) {
@@ -608,10 +608,7 @@ var plugin = {
608
608
  elementSchema: schema_default
609
609
  };
610
610
  var src_default = plugin;
611
-
612
- // src/entry-esm.ts
613
- var entry_esm_default = src_default;
614
611
  export {
615
- entry_esm_default as default
612
+ src_default as default
616
613
  };
617
614
  //# sourceMappingURL=index.mjs.map
@@ -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-esm.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\": \"7.4.1\",\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\": \"2.2.0\",\n \"semver\": \"7.7.4\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"0.18.2\",\n \"@html-validate/commitlint-config\": \"3.6.5\",\n \"@html-validate/eslint-config\": \"6.14.0\",\n \"@html-validate/eslint-config-jest\": \"6.14.0\",\n \"@html-validate/eslint-config-typescript\": \"6.14.0\",\n \"@html-validate/eslint-config-typescript-typeinfo\": \"6.14.0\",\n \"@html-validate/jest-config\": \"3.13.1\",\n \"@html-validate/prettier-config\": \"3.1.15\",\n \"@html-validate/release-scripts\": \"7.1.0\",\n \"@tsconfig/node18\": \"18.2.6\",\n \"@tsconfig/strictest\": \"2.0.8\",\n \"@types/estree\": \"1.0.8\",\n \"@types/jest\": \"30.0.0\",\n \"@types/node\": \"18.19.130\",\n \"@types/semver\": \"7.7.1\",\n \"dts-bundle-generator\": \"9.5.1\",\n \"esbuild\": \"0.27.3\",\n \"html-validate\": \"10.7.0\",\n \"husky\": \"9.1.7\",\n \"jest\": \"30.2.0\",\n \"jest-environment-jsdom\": \"30.2.0\",\n \"npm-pkg-lint\": \"4.3.4\",\n \"npm-run-all2\": \"8.0.4\",\n \"ts-jest\": \"29.4.6\",\n \"typescript\": \"5.9.3\"\n },\n \"peerDependencies\": {\n \"html-validate\": \"^8.21.0 || ^9.0.0 || ^10.0.0\"\n },\n \"engines\": {\n \"node\": \">= 18.0\"\n },\n \"externalDependencies\": [\n \"@html-validate/plugin-utils\"\n ]\n}\n", "import { defineMetadata } from \"html-validate\";\n\nexport default defineMetadata({\n\tcomponent: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tcomponent: \"is\",\n\t\trequiredAttributes: [\"is\"],\n\t},\n\n\t\"keep-alive\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\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},\n\n\t\"router-view\": {\n\t\tflow: true,\n\t\tslots: [\"default\"],\n\t},\n\n\tslot: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tscriptSupporting: true,\n\t},\n\n\tsuspense: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tslots: [\"default\", \"fallback\"],\n\t},\n\n\tteleport: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t},\n\n\ttransition: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\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},\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\ninterface Context {\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<Context> {\n\tpublic override documentation(context?: Context): 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: Context = {\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.replace(/{{(.*?)}}/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\ninterface 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 (/^\\[.*\\]$/.exec(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\ninterface Context {\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<Context> {\n\tpublic override documentation(context?: Context): 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: Context = {\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=\".*?\"/.exec(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.exec(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.exec(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 default plugin;\n"],
5
- "mappings": "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",
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\": \"8.0.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\": \"3.0.0\",\n \"semver\": \"7.7.4\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"0.18.2\",\n \"@html-validate/commitlint-config\": \"3.6.7\",\n \"@html-validate/eslint-config\": \"6.17.3\",\n \"@html-validate/eslint-config-jest\": \"6.17.0\",\n \"@html-validate/eslint-config-typescript\": \"6.17.0\",\n \"@html-validate/eslint-config-typescript-typeinfo\": \"6.17.0\",\n \"@html-validate/jest-config\": \"3.13.1\",\n \"@html-validate/prettier-config\": \"3.1.15\",\n \"@html-validate/release-scripts\": \"7.1.0\",\n \"@tsconfig/node20\": \"20.1.9\",\n \"@tsconfig/strictest\": \"2.0.8\",\n \"@types/estree\": \"1.0.8\",\n \"@types/jest\": \"30.0.0\",\n \"@types/node\": \"20.19.35\",\n \"@types/semver\": \"7.7.1\",\n \"dts-bundle-generator\": \"9.5.1\",\n \"esbuild\": \"0.27.3\",\n \"html-validate\": \"10.9.0\",\n \"husky\": \"9.1.7\",\n \"jest\": \"30.2.0\",\n \"jest-environment-jsdom\": \"30.2.0\",\n \"npm-pkg-lint\": \"4.4.0\",\n \"npm-run-all2\": \"8.0.4\",\n \"ts-jest\": \"29.4.6\",\n \"typescript\": \"5.9.3\"\n },\n \"peerDependencies\": {\n \"html-validate\": \"^8.21.0 || ^9.0.0 || ^10.0.0\"\n },\n \"engines\": {\n \"node\": \"^20.11 || >= 22.16\"\n },\n \"externalDependencies\": [\n \"@html-validate/plugin-utils\"\n ]\n}\n", "import { defineMetadata } from \"html-validate\";\n\nexport default defineMetadata({\n\tcomponent: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tcomponent: \"is\",\n\t\trequiredAttributes: [\"is\"],\n\t},\n\n\t\"keep-alive\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\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},\n\n\t\"router-view\": {\n\t\tflow: true,\n\t\tslots: [\"default\"],\n\t},\n\n\tslot: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tscriptSupporting: true,\n\t},\n\n\tsuspense: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tslots: [\"default\", \"fallback\"],\n\t},\n\n\tteleport: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t},\n\n\ttransition: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\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},\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\ninterface Context {\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<Context> {\n\tpublic override documentation(context?: Context): 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: Context = {\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\ninterface 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\ninterface Context {\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<Context> {\n\tpublic override documentation(context?: Context): 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: Context = {\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
6
  "names": ["Rule", "walk", "Rule", "walk", "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": "7.4.2",
3
+ "version": "8.1.0",
4
4
  "description": "vue transform for html-validate",
5
5
  "keywords": [
6
6
  "html",
@@ -36,12 +36,12 @@
36
36
  "dist"
37
37
  ],
38
38
  "dependencies": {
39
- "@html-validate/plugin-utils": "2.2.0"
39
+ "@html-validate/plugin-utils": "3.0.0"
40
40
  },
41
41
  "peerDependencies": {
42
42
  "html-validate": "^8.21.0 || ^9.0.0 || ^10.0.0"
43
43
  },
44
44
  "engines": {
45
- "node": ">= 18.0"
45
+ "node": "^20.11 || >= 22.16"
46
46
  }
47
47
  }