routie dev init since i didn't adhere to any proper guidance up until now

This commit is contained in:
2026-04-29 22:27:29 -06:00
commit e1dabb71e2
15301 changed files with 3562618 additions and 0 deletions
@@ -0,0 +1,200 @@
const require_runtime = require('../_virtual/_rolldown/runtime.js');
const require_index = require('../utils/index.js');
const require_casing = require('../utils/casing.js');
const require_regexp = require('../utils/regexp.js');
//#region lib/rules/no-bare-strings-in-template.ts
var import_utils = /* @__PURE__ */ require_runtime.__toESM(require_index.default);
const DEFAULT_ALLOWLIST = [
"(",
")",
",",
".",
"&",
"+",
"-",
"=",
"*",
"/",
"#",
"%",
"!",
"?",
":",
"[",
"]",
"{",
"}",
"<",
">",
"·",
"•",
"",
"",
"—",
"",
"|"
];
const DEFAULT_ATTRIBUTES = {
"/.+/": [
"title",
"aria-label",
"aria-placeholder",
"aria-roledescription",
"aria-valuetext"
],
input: ["placeholder"],
img: ["alt"]
};
const DEFAULT_DIRECTIVES = ["v-text"];
/**
* Parse attributes option
*/
function parseTargetAttrs(options) {
const result = {
names: {},
regexps: [],
cache: {}
};
for (const tagName of Object.keys(options)) {
const attrs = new Set(options[tagName]);
if (require_regexp.isRegExp(tagName)) result.regexps.push({
name: require_regexp.toRegExp(tagName),
attrs
});
else result.names[tagName] = attrs;
}
return result;
}
/**
* Get a string from given expression container node
*/
function getStringValue(value) {
const expression = value.expression;
if (!expression) return null;
if (expression.type !== "Literal") return null;
if (typeof expression.value === "string") return expression.value;
return null;
}
var no_bare_strings_in_template_default = {
meta: {
type: "suggestion",
docs: {
description: "disallow the use of bare strings in `<template>`",
categories: void 0,
url: "https://eslint.vuejs.org/rules/no-bare-strings-in-template.html"
},
schema: [{
type: "object",
properties: {
allowlist: {
type: "array",
items: { type: "string" },
uniqueItems: true
},
attributes: {
type: "object",
patternProperties: { "^(?:\\S+|/.*/[a-z]*)$": {
type: "array",
items: { type: "string" },
uniqueItems: true
} },
additionalProperties: false
},
directives: {
type: "array",
items: {
type: "string",
pattern: "^v-"
},
uniqueItems: true
}
},
additionalProperties: false
}],
messages: {
unexpected: "Unexpected non-translated string used.",
unexpectedInAttr: "Unexpected non-translated string used in `{{attr}}`."
}
},
create(context) {
const opts = context.options[0] || {};
const rawAllowlist = opts.allowlist || DEFAULT_ALLOWLIST;
const attributes = parseTargetAttrs(opts.attributes || DEFAULT_ATTRIBUTES);
const directives = opts.directives || DEFAULT_DIRECTIVES;
const stringAllowlist = [];
const regexAllowlist = [];
for (const item of rawAllowlist) if (require_regexp.isRegExp(item)) regexAllowlist.push(require_regexp.toRegExp(item));
else stringAllowlist.push(item);
const allowlistRe = stringAllowlist.length > 0 ? new RegExp(stringAllowlist.map((w) => require_regexp.escape(w)).sort((a, b) => b.length - a.length).join("|"), "gu") : null;
let elementStack = null;
/**
* Gets the bare string from given string
*/
function getBareString(str) {
let result = str.trim();
if (allowlistRe) result = result.replace(allowlistRe, "");
for (const regex of regexAllowlist) {
const flags = regex.flags.includes("g") ? regex.flags : `${regex.flags}g`;
const globalRegex = new RegExp(regex.source, flags);
result = result.replace(globalRegex, "");
}
return result.trim();
}
/**
* Get the attribute to be verified from the element name.
*/
function getTargetAttrs(tagName) {
if (attributes.cache[tagName]) return attributes.cache[tagName];
const result = [];
if (attributes.names[tagName]) result.push(...attributes.names[tagName]);
for (const { name, attrs } of attributes.regexps) {
name.lastIndex = 0;
if (name.test(tagName)) result.push(...attrs);
}
if (require_casing.isKebabCase(tagName)) result.push(...getTargetAttrs(require_casing.pascalCase(tagName)));
return attributes.cache[tagName] = new Set(result);
}
return import_utils.default.defineTemplateBodyVisitor(context, {
VText(node) {
if (getBareString(node.value)) context.report({
node,
messageId: "unexpected"
});
},
VElement(node) {
elementStack = {
upper: elementStack,
name: node.rawName,
attrs: getTargetAttrs(node.rawName)
};
},
"VElement:exit"() {
elementStack = elementStack && elementStack.upper;
},
VAttribute(node) {
if (!node.value || !elementStack) return;
if (node.directive === false) {
if (!elementStack.attrs.has(node.key.rawName)) return;
if (getBareString(node.value.value)) context.report({
node: node.value,
messageId: "unexpectedInAttr",
data: { attr: node.key.rawName }
});
} else {
const directive = `v-${node.key.name.name}`;
if (!directives.includes(directive)) return;
const str = getStringValue(node.value);
if (str && getBareString(str)) context.report({
node: node.value,
messageId: "unexpectedInAttr",
data: { attr: directive }
});
}
}
});
}
};
//#endregion
exports.default = no_bare_strings_in_template_default;