html-validate-vue 6.0.7 → 6.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.
package/dist/index.js CHANGED
@@ -79,7 +79,7 @@ function findUsedSlots(node) {
79
79
  }
80
80
  function findSlotAttribute(node) {
81
81
  for (const attr of node.attributes) {
82
- const match = attr.key.match(slotAttr);
82
+ const match = slotAttr.exec(attr.key);
83
83
  if (match) {
84
84
  const [, slot] = match;
85
85
  return [slot, attr.keyLocation];
@@ -159,7 +159,7 @@ function isVSlot(attr) {
159
159
  return null;
160
160
  }
161
161
  const slot = attr.slice(prefix.length);
162
- if (slot.match(/^\[.*\]$/)) {
162
+ if (/^\[.*\]$/.exec(slot)) {
163
163
  return null;
164
164
  }
165
165
  return slot;
@@ -191,12 +191,14 @@ var PreferSlotShorthand = class extends import_html_validate2.Rule {
191
191
  this.on("attr", (event) => {
192
192
  const { key: attr, value, target, keyLocation: location } = event;
193
193
  let slot;
194
- if (slot = isVSlot(attr)) {
194
+ slot = isVSlot(attr);
195
+ if (slot) {
195
196
  const context = { slot };
196
197
  const message = `Prefer to use #${slot} over ${attr}`;
197
198
  this.report(target, message, location, context);
198
199
  }
199
- if (slot = isDeprecatedSlot(attr, value)) {
200
+ slot = isDeprecatedSlot(attr, value);
201
+ if (slot) {
200
202
  const context = { slot };
201
203
  const message = `Prefer to use #${slot} over ${attr}="${value.toString()}"`;
202
204
  this.report(target, message, location, context);
@@ -275,16 +277,14 @@ var rules_default = rules;
275
277
  var import_html_validate4 = require("html-validate");
276
278
  function* processAttribute(attr) {
277
279
  yield attr;
278
- if (!attr.value) {
279
- return;
280
- }
281
- const bind = attr.key.match(/^(?:v-bind)?:(.*)$/);
280
+ const bind = /^(?:v-bind)?:(.*)$/.exec(attr.key);
282
281
  if (bind) {
283
- yield Object.assign({}, attr, {
282
+ yield {
283
+ ...attr,
284
284
  key: bind[1],
285
- value: new import_html_validate4.DynamicValue(attr.value),
285
+ value: new import_html_validate4.DynamicValue(attr.value ? String(attr.value) : ""),
286
286
  originalAttribute: attr.key
287
- });
287
+ };
288
288
  }
289
289
  }
290
290
 
@@ -398,7 +398,7 @@ function* transformSFC(source) {
398
398
  let match;
399
399
  while ((match = sfc.exec(source.data)) !== null) {
400
400
  const [, preamble, attr, data] = match;
401
- if (!attr.match(/lang=".*?"/)) {
401
+ if (!/lang=".*?"/.exec(attr)) {
402
402
  const [line, column] = findLocation(source.data, match.index, preamble.length);
403
403
  yield {
404
404
  data: stripTemplating(data),
@@ -419,10 +419,10 @@ transformSFC.api = 1;
419
419
 
420
420
  // src/transform/auto.transform.ts
421
421
  function isVue(source) {
422
- return !!source.filename.match(/\.vue$/i);
422
+ return !!/\.vue$/i.exec(source.filename);
423
423
  }
424
424
  function isJavascript(source) {
425
- return !!source.filename.match(/\.(jsx?|tsx?)$/i);
425
+ return !!/\.(jsx?|tsx?)$/i.exec(source.filename);
426
426
  }
427
427
  function* autodetect(source) {
428
428
  if (isVue(source)) {
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.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/prefer-slot-shorthand.ts", "../src/rules/required-slots.ts", "../src/rules/index.ts", "../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/schema.json"],
4
- "sourcesContent": ["import { type Plugin, compatibilityCheck } from \"html-validate\";\nimport configs from \"./configs\";\nimport rules from \"./rules\";\nimport transformer from \"./transform\";\nimport elementSchema from \"./schema.json\";\n\ninterface PackageJson {\n\tname: string;\n\tpeerDependencies: Record<string, string>;\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-var-requires -- want to import at runtime */\nconst pkg = require(\"../package.json\") as PackageJson;\n\nconst range = pkg.peerDependencies[\"html-validate\"];\ncompatibilityCheck(pkg.name, range);\n\nconst plugin: Plugin = {\n\tname: pkg.name,\n\tconfigs,\n\trules,\n\ttransformer,\n\telementSchema,\n};\n\nexport = plugin;\n", "import path from \"path\";\nimport { type ConfigData } from \"html-validate\";\n\nconst rootDir = path.dirname(require.resolve(\"html-validate-vue/package.json\"));\n\nexport function createConfig(): ConfigData {\n\tconst config: ConfigData = {\n\t\telements: [path.join(rootDir, \"elements.json\")],\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 { type HtmlElement, Rule, type RuleDocumentation, type DOMReadyEvent } from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\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 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\tdoc.visitDepthFirst((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\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 = attr.key.match(slotAttr);\n\t\tif (match) {\n\t\t\tconst [, slot] = match;\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.toString(), attr.valueLocation!];\n\t\t}\n\t}\n\treturn null;\n}\n", "import { Rule, type RuleDocumentation, type AttributeEvent, DynamicValue } 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 (slot.match(/^\\[.*\\]$/)) {\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.toString();\n}\n\nexport class PreferSlotShorthand extends Rule<RuleContext> {\n\tpublic 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\tif ((slot = isVSlot(attr))) {\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\tif ((slot = isDeprecatedSlot(attr, value))) {\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 { type DOMReadyEvent, type HtmlElement, type RuleDocumentation, Rule } from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\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 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\tdoc.visitDepthFirst((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 { PreferSlotShorthand } from \"./prefer-slot-shorthand\";\nimport { RequiredSlots } from \"./required-slots\";\n\nconst rules = {\n\t\"vue/available-slots\": AvailableSlots,\n\t\"vue/prefer-slot-shorthand\": PreferSlotShorthand,\n\t\"vue/required-slots\": RequiredSlots,\n};\n\nexport default rules;\n", "import { DynamicValue, type AttributeData } from \"html-validate\";\n\nexport function* processAttribute(attr: AttributeData): Iterable<AttributeData> {\n\t/* always yield original attribute */\n\tyield attr;\n\n\t/* boolean attributes cannot be dynamic */\n\tif (!attr.value) {\n\t\treturn;\n\t}\n\n\t/* setup :foo and v-bind:foo alias */\n\tconst bind = attr.key.match(/^(?:v-bind)?:(.*)$/);\n\tif (bind) {\n\t\tyield Object.assign({}, attr, {\n\t\t\tkey: bind[1],\n\t\t\tvalue: new DynamicValue(attr.value as string),\n\t\t\toriginalAttribute: attr.key,\n\t\t});\n\t}\n}\n", "import {\n\tDynamicValue,\n\ttype HtmlElement,\n\ttype MetaElement,\n\ttype ProcessElementContext,\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/* 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 { type Source } from \"html-validate\";\nimport { TemplateExtractor } from \"@html-validate/plugin-utils\";\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\n/**\n * Match templates from SFC <template> tag\n */\nexport function* transformSFC(source: Source): Iterable<Source> {\n\tconst sfc = /^(<template([^>]*)>)([^]*?)^<\\/template>/gm;\n\tlet match;\n\twhile ((match = sfc.exec(source.data)) !== null) {\n\t\tconst [, preamble, attr, data] = match;\n\t\tif (!attr.match(/lang=\".*?\"/)) {\n\t\t\tconst [line, column] = findLocation(source.data, match.index, preamble.length);\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 || 0) + preamble.length,\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 !!source.filename.match(/\\.vue$/i);\n}\n\n/**\n * Returns true if the source is considered javascript\n */\nfunction isJavascript(source: Source): boolean {\n\treturn !!source.filename.match(/\\.(jsx?|tsx?)$/i);\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", "{\n \"properties\": {\n \"component\": {\n \"type\": \"string\",\n \"copyable\": true\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"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { type Plugin, compatibilityCheck } from \"html-validate\";\nimport configs from \"./configs\";\nimport rules from \"./rules\";\nimport transformer from \"./transform\";\nimport elementSchema from \"./schema.json\";\n\ninterface PackageJson {\n\tname: string;\n\tpeerDependencies: Record<string, string>;\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-require-imports -- want to import at runtime */\nconst pkg = require(\"../package.json\") as PackageJson;\n\nconst range = pkg.peerDependencies[\"html-validate\"];\ncompatibilityCheck(pkg.name, range);\n\nconst plugin: Plugin = {\n\tname: pkg.name,\n\tconfigs,\n\trules,\n\ttransformer,\n\telementSchema,\n};\n\nexport = plugin;\n", "import path from \"path\";\nimport { type ConfigData } from \"html-validate\";\n\nconst rootDir = path.dirname(require.resolve(\"html-validate-vue/package.json\"));\n\nexport function createConfig(): ConfigData {\n\tconst config: ConfigData = {\n\t\telements: [path.join(rootDir, \"elements.json\")],\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 { type HtmlElement, Rule, type RuleDocumentation, type DOMReadyEvent } from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\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 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\t/* eslint-disable-next-line @typescript-eslint/no-deprecated -- need to\n\t\t\t * use this for backwards compatibility until support for v7 is dropped */\n\t\t\tdoc.visitDepthFirst((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\tconst [, slot] = match;\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.toString(), attr.valueLocation!];\n\t\t}\n\t}\n\treturn null;\n}\n", "import { Rule, type RuleDocumentation, type AttributeEvent, DynamicValue } 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.toString();\n}\n\nexport class PreferSlotShorthand extends Rule<RuleContext> {\n\tpublic 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 { type DOMReadyEvent, type HtmlElement, type RuleDocumentation, Rule } from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\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 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\t/* eslint-disable-next-line @typescript-eslint/no-deprecated -- need to\n\t\t\t * use this for backwards compatibility until support for v7 is dropped */\n\t\t\tdoc.visitDepthFirst((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 { PreferSlotShorthand } from \"./prefer-slot-shorthand\";\nimport { RequiredSlots } from \"./required-slots\";\n\nconst rules = {\n\t\"vue/available-slots\": AvailableSlots,\n\t\"vue/prefer-slot-shorthand\": PreferSlotShorthand,\n\t\"vue/required-slots\": RequiredSlots,\n};\n\nexport default rules;\n", "import { DynamicValue, type AttributeData } 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\tyield {\n\t\t\t...attr,\n\t\t\tkey: bind[1],\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\tDynamicValue,\n\ttype HtmlElement,\n\ttype MetaElement,\n\ttype ProcessElementContext,\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/* 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 { type Source } from \"html-validate\";\nimport { TemplateExtractor } from \"@html-validate/plugin-utils\";\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\n/**\n * Match templates from SFC <template> tag\n */\nexport function* transformSFC(source: Source): Iterable<Source> {\n\tconst sfc = /^(<template([^>]*)>)([^]*?)^<\\/template>/gm;\n\tlet match;\n\twhile ((match = sfc.exec(source.data)) !== null) {\n\t\tconst [, preamble, attr, data] = match;\n\t\tif (!/lang=\".*?\"/.exec(attr)) {\n\t\t\tconst [line, column] = findLocation(source.data, match.index, preamble.length);\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 || 0) + preamble.length,\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", "{\n \"properties\": {\n \"component\": {\n \"type\": \"string\",\n \"copyable\": true\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"],
5
+ "mappings": "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",
6
6
  "names": ["import_html_validate", "path", "import_html_validate", "import_html_validate", "difference", "import_html_validate", "import_html_validate", "meta"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "html-validate-vue",
3
- "version": "6.0.7",
3
+ "version": "6.1.0",
4
4
  "description": "vue transform for html-validate",
5
5
  "keywords": [
6
6
  "html",
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "repository": {
16
16
  "type": "git",
17
- "url": "https://gitlab.com/html-validate/html-validate-vue.git"
17
+ "url": "git+https://gitlab.com/html-validate/html-validate-vue.git"
18
18
  },
19
19
  "license": "MIT",
20
20
  "author": "David Sveningsson <ext@sidvind.com>",