150 lines
7.8 KiB
JavaScript
150 lines
7.8 KiB
JavaScript
const require_runtime = require('../_virtual/_rolldown/runtime.js');
|
|
const require_index = require('../utils/index.js');
|
|
const require_slot_scope_attribute$1 = require('./syntaxes/slot-scope-attribute.js');
|
|
const require_v_is$1 = require('./syntaxes/v-is.js');
|
|
const require_dynamic_directive_arguments$1 = require('./syntaxes/dynamic-directive-arguments.js');
|
|
const require_v_slot$1 = require('./syntaxes/v-slot.js');
|
|
const require_script_setup$1 = require('./syntaxes/script-setup.js');
|
|
const require_style_css_vars_injection = require('./syntaxes/style-css-vars-injection.js');
|
|
const require_v_model_argument$1 = require('./syntaxes/v-model-argument.js');
|
|
const require_v_model_custom_modifiers$1 = require('./syntaxes/v-model-custom-modifiers.js');
|
|
const require_is_attribute_with_vue_prefix$1 = require('./syntaxes/is-attribute-with-vue-prefix.js');
|
|
const require_v_memo$1 = require('./syntaxes/v-memo.js');
|
|
const require_v_bind_prop_modifier_shorthand$1 = require('./syntaxes/v-bind-prop-modifier-shorthand.js');
|
|
const require_v_bind_attr_modifier$1 = require('./syntaxes/v-bind-attr-modifier.js');
|
|
const require_define_options$1 = require('./syntaxes/define-options.js');
|
|
const require_define_slots$1 = require('./syntaxes/define-slots.js');
|
|
const require_define_model$1 = require('./syntaxes/define-model.js');
|
|
const require_v_bind_same_name_shorthand$1 = require('./syntaxes/v-bind-same-name-shorthand.js');
|
|
let semver = require("semver");
|
|
semver = require_runtime.__toESM(semver);
|
|
|
|
//#region lib/rules/no-unsupported-features.ts
|
|
/**
|
|
* @author Yosuke Ota
|
|
* See LICENSE file in root directory for full license.
|
|
*/
|
|
var import_utils = /* @__PURE__ */ require_runtime.__toESM(require_index.default);
|
|
var import_slot_scope_attribute = /* @__PURE__ */ require_runtime.__toESM(require_slot_scope_attribute$1.default);
|
|
var import_dynamic_directive_arguments = /* @__PURE__ */ require_runtime.__toESM(require_dynamic_directive_arguments$1.default);
|
|
var import_v_slot = /* @__PURE__ */ require_runtime.__toESM(require_v_slot$1.default);
|
|
var import_script_setup = /* @__PURE__ */ require_runtime.__toESM(require_script_setup$1.default);
|
|
var import_v_model_argument = /* @__PURE__ */ require_runtime.__toESM(require_v_model_argument$1.default);
|
|
var import_v_model_custom_modifiers = /* @__PURE__ */ require_runtime.__toESM(require_v_model_custom_modifiers$1.default);
|
|
var import_v_is = /* @__PURE__ */ require_runtime.__toESM(require_v_is$1.default);
|
|
var import_is_attribute_with_vue_prefix = /* @__PURE__ */ require_runtime.__toESM(require_is_attribute_with_vue_prefix$1.default);
|
|
var import_v_memo = /* @__PURE__ */ require_runtime.__toESM(require_v_memo$1.default);
|
|
var import_v_bind_prop_modifier_shorthand = /* @__PURE__ */ require_runtime.__toESM(require_v_bind_prop_modifier_shorthand$1.default);
|
|
var import_v_bind_attr_modifier = /* @__PURE__ */ require_runtime.__toESM(require_v_bind_attr_modifier$1.default);
|
|
var import_define_options = /* @__PURE__ */ require_runtime.__toESM(require_define_options$1.default);
|
|
var import_define_slots = /* @__PURE__ */ require_runtime.__toESM(require_define_slots$1.default);
|
|
var import_define_model = /* @__PURE__ */ require_runtime.__toESM(require_define_model$1.default);
|
|
var import_v_bind_same_name_shorthand = /* @__PURE__ */ require_runtime.__toESM(require_v_bind_same_name_shorthand$1.default);
|
|
const FEATURES = {
|
|
"slot-scope-attribute": import_slot_scope_attribute.default,
|
|
"dynamic-directive-arguments": import_dynamic_directive_arguments.default,
|
|
"v-slot": import_v_slot.default,
|
|
"script-setup": import_script_setup.default,
|
|
"style-css-vars-injection": require_style_css_vars_injection.default,
|
|
"v-model-argument": import_v_model_argument.default,
|
|
"v-model-custom-modifiers": import_v_model_custom_modifiers.default,
|
|
"v-is": import_v_is.default,
|
|
"is-attribute-with-vue-prefix": import_is_attribute_with_vue_prefix.default,
|
|
"v-memo": import_v_memo.default,
|
|
"v-bind-prop-modifier-shorthand": import_v_bind_prop_modifier_shorthand.default,
|
|
"v-bind-attr-modifier": import_v_bind_attr_modifier.default,
|
|
"define-options": import_define_options.default,
|
|
"define-slots": import_define_slots.default,
|
|
"define-model": import_define_model.default,
|
|
"v-bind-same-name-shorthand": import_v_bind_same_name_shorthand.default
|
|
};
|
|
const SYNTAX_NAMES = Object.keys(FEATURES);
|
|
const cache = /* @__PURE__ */ new Map();
|
|
/**
|
|
* Get the `semver.Range` object of a given range text.
|
|
* It's null if the `x` is not a valid range text.
|
|
*/
|
|
function getSemverRange(x) {
|
|
const s = String(x);
|
|
let ret = cache.get(s) || null;
|
|
if (!ret) {
|
|
try {
|
|
ret = new semver.default.Range(s);
|
|
} catch {}
|
|
cache.set(s, ret);
|
|
}
|
|
return ret;
|
|
}
|
|
var no_unsupported_features_default = {
|
|
meta: {
|
|
type: "suggestion",
|
|
docs: {
|
|
description: "disallow unsupported Vue.js syntax on the specified version",
|
|
categories: void 0,
|
|
url: "https://eslint.vuejs.org/rules/no-unsupported-features.html"
|
|
},
|
|
fixable: "code",
|
|
schema: [{
|
|
type: "object",
|
|
properties: {
|
|
version: { type: "string" },
|
|
ignores: {
|
|
type: "array",
|
|
items: { enum: SYNTAX_NAMES },
|
|
uniqueItems: true
|
|
}
|
|
},
|
|
additionalProperties: false
|
|
}],
|
|
messages: {
|
|
forbiddenSlotScopeAttribute: "`slot-scope` are not supported except Vue.js \">=2.5.0 <3.0.0\".",
|
|
forbiddenDynamicDirectiveArguments: "Dynamic arguments are not supported until Vue.js \"2.6.0\".",
|
|
forbiddenVSlot: "`v-slot` are not supported until Vue.js \"2.6.0\".",
|
|
forbiddenScriptSetup: "`<script setup>` is not supported until Vue.js \"2.7.0\".",
|
|
forbiddenStyleCssVarsInjection: "SFC CSS variable injection is not supported until Vue.js \">=3.0.3 || >=2.7.0 <3.0.0\".",
|
|
forbiddenVModelArgument: "Argument on `v-model` is not supported until Vue.js \"3.0.0\".",
|
|
forbiddenVModelCustomModifiers: "Custom modifiers on `v-model` are not supported until Vue.js \"3.0.0\".",
|
|
forbiddenVIs: "`v-is` are not supported until Vue.js \"3.0.0\".",
|
|
forbiddenIsAttributeWithVuePrefix: "`is=\"vue:\"` are not supported until Vue.js \"3.1.0\".",
|
|
forbiddenVMemo: "`v-memo` are not supported until Vue.js \"3.2.0\".",
|
|
forbiddenVBindPropModifierShorthand: "`.prop` shorthand are not supported until Vue.js \"3.2.0\".",
|
|
forbiddenVBindAttrModifier: "`.attr` modifiers on `v-bind` are not supported until Vue.js \"3.2.0\".",
|
|
forbiddenDefineOptions: "`defineOptions()` macros are not supported until Vue.js \"3.3.0\".",
|
|
forbiddenDefineSlots: "`defineSlots()` macros are not supported until Vue.js \"3.3.0\".",
|
|
forbiddenDefineModel: "`defineModel()` macros are not supported until Vue.js \"3.4.0\".",
|
|
forbiddenVBindSameNameShorthand: "`v-bind` same-name shorthand is not supported until Vue.js \"3.4.0\"."
|
|
}
|
|
},
|
|
create(context) {
|
|
const { version, ignores } = Object.assign({
|
|
version: null,
|
|
ignores: []
|
|
}, context.options[0] || {});
|
|
if (!version) return {};
|
|
const versionRange = getSemverRange(version);
|
|
/**
|
|
* Check whether a given case object is full-supported on the configured node version.
|
|
*/
|
|
function isNotSupportingVersion(aCase) {
|
|
return !semver.default.subset(versionRange, getSemverRange(aCase.supported));
|
|
}
|
|
let templateBodyVisitor = {};
|
|
let scriptVisitor = {};
|
|
for (const syntaxName of SYNTAX_NAMES) {
|
|
const syntax = FEATURES[syntaxName];
|
|
if (ignores.includes(syntaxName) || !isNotSupportingVersion(syntax)) continue;
|
|
if (syntax.createTemplateBodyVisitor) {
|
|
const visitor = syntax.createTemplateBodyVisitor(context);
|
|
templateBodyVisitor = import_utils.default.compositingVisitors(templateBodyVisitor, visitor);
|
|
}
|
|
if (syntax.createScriptVisitor) {
|
|
const visitor = syntax.createScriptVisitor(context);
|
|
scriptVisitor = import_utils.default.compositingVisitors(scriptVisitor, visitor);
|
|
}
|
|
}
|
|
return import_utils.default.defineTemplateBodyVisitor(context, templateBodyVisitor, scriptVisitor);
|
|
}
|
|
};
|
|
|
|
//#endregion
|
|
exports.default = no_unsupported_features_default; |