eslint-plugin-svelte 2.27.4 → 2.28.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/README.md CHANGED
@@ -346,9 +346,11 @@ These rules relate to better ways of doing things to help you avoid problems:
346
346
  | [svelte/no-unused-svelte-ignore](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unused-svelte-ignore/) | disallow unused svelte-ignore comments | :star: |
347
347
  | [svelte/no-useless-mustaches](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-useless-mustaches/) | disallow unnecessary mustache interpolations | :wrench: |
348
348
  | [svelte/prefer-destructured-store-props](https://sveltejs.github.io/eslint-plugin-svelte/rules/prefer-destructured-store-props/) | destructure values from object stores for better change tracking & fewer redraws | :bulb: |
349
+ | [svelte/require-each-key](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-each-key/) | require keyed `{#each}` block | |
349
350
  | [svelte/require-event-dispatcher-types](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-event-dispatcher-types/) | require type parameters for `createEventDispatcher` | |
350
351
  | [svelte/require-optimized-style-attribute](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-optimized-style-attribute/) | require style attributes that can be optimized | |
351
352
  | [svelte/require-stores-init](https://sveltejs.github.io/eslint-plugin-svelte/rules/require-stores-init/) | require initial value in store | |
353
+ | [svelte/valid-each-key](https://sveltejs.github.io/eslint-plugin-svelte/rules/valid-each-key/) | enforce keys to use variables defined in the `{#each}` block | |
352
354
 
353
355
  ## Stylistic Issues
354
356
 
package/lib/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { RuleModule } from "./types";
2
2
  import * as processor from "./processor";
3
3
  declare const _default: {
4
+ meta: typeof processor.meta;
4
5
  configs: {
5
6
  base: {
6
7
  plugins: string[];
package/lib/index.js CHANGED
@@ -31,6 +31,7 @@ const recommended_1 = __importDefault(require("./configs/recommended"));
31
31
  const prettier_1 = __importDefault(require("./configs/prettier"));
32
32
  const all_1 = __importDefault(require("./configs/all"));
33
33
  const processor = __importStar(require("./processor"));
34
+ const meta = __importStar(require("./meta"));
34
35
  const configs = {
35
36
  base: base_1.default,
36
37
  recommended: recommended_1.default,
@@ -42,6 +43,7 @@ const rules = rules_1.rules.reduce((obj, r) => {
42
43
  return obj;
43
44
  }, {});
44
45
  module.exports = {
46
+ meta,
45
47
  configs,
46
48
  rules,
47
49
  processors: {
package/lib/meta.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare const name: "eslint-plugin-svelte";
2
+ export declare const version: "2.28.0";
package/lib/meta.js ADDED
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.version = exports.name = void 0;
4
+ exports.name = "eslint-plugin-svelte";
5
+ exports.version = "2.28.0";
@@ -1,4 +1,5 @@
1
1
  import type { Linter } from "eslint";
2
+ export * as meta from "../meta";
2
3
  export declare function preprocess(code: string, filename: string): string[];
3
4
  export declare function postprocess([messages]: Linter.LintMessage[][], filename: string): Linter.LintMessage[];
4
5
  export declare const supportsAutofix = true;
@@ -1,7 +1,31 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.supportsAutofix = exports.postprocess = exports.preprocess = void 0;
26
+ exports.supportsAutofix = exports.postprocess = exports.preprocess = exports.meta = void 0;
4
27
  const shared_1 = require("../shared");
28
+ exports.meta = __importStar(require("../meta"));
5
29
  function preprocess(code, filename) {
6
30
  if (filename) {
7
31
  (0, shared_1.beginShared)(filename);
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../types").RuleModule;
2
+ export default _default;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("../utils");
4
+ exports.default = (0, utils_1.createRule)("require-each-key", {
5
+ meta: {
6
+ docs: {
7
+ description: "require keyed `{#each}` block",
8
+ category: "Best Practices",
9
+ recommended: false,
10
+ },
11
+ schema: [],
12
+ messages: { expectedKey: "Each block should have a key" },
13
+ type: "suggestion",
14
+ },
15
+ create(context) {
16
+ return {
17
+ SvelteEachBlock(node) {
18
+ if (node.key == null) {
19
+ context.report({
20
+ node,
21
+ messageId: "expectedKey",
22
+ });
23
+ }
24
+ },
25
+ };
26
+ },
27
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../types").RuleModule;
2
+ export default _default;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("../utils");
4
+ const ast_utils_1 = require("../utils/ast-utils");
5
+ exports.default = (0, utils_1.createRule)("valid-each-key", {
6
+ meta: {
7
+ docs: {
8
+ description: "enforce keys to use variables defined in the `{#each}` block",
9
+ category: "Best Practices",
10
+ recommended: false,
11
+ },
12
+ schema: [],
13
+ messages: {
14
+ keyUseEachVars: "Expected key to use the variables which are defined by the `{#each}` block.",
15
+ },
16
+ type: "suggestion",
17
+ },
18
+ create(context) {
19
+ return {
20
+ SvelteEachBlock(node) {
21
+ if (node.key == null) {
22
+ return;
23
+ }
24
+ const scope = (0, ast_utils_1.getScope)(context, node.key);
25
+ for (const variable of scope.variables) {
26
+ if (!variable.defs.some((def) => (node.context.range[0] <= def.name.range[0] &&
27
+ def.name.range[1] <= node.context.range[1]) ||
28
+ (node.index &&
29
+ node.index.range[0] <= def.name.range[0] &&
30
+ def.name.range[1] <= node.index.range[1]))) {
31
+ continue;
32
+ }
33
+ for (const reference of variable.references) {
34
+ if (node.key.range[0] <= reference.identifier.range[0] &&
35
+ reference.identifier.range[1] <= node.key.range[1]) {
36
+ return;
37
+ }
38
+ }
39
+ }
40
+ context.report({
41
+ node: node.key,
42
+ messageId: "keyUseEachVars",
43
+ });
44
+ },
45
+ };
46
+ },
47
+ });
@@ -47,6 +47,7 @@ const no_useless_mustaches_1 = __importDefault(require("../rules/no-useless-must
47
47
  const prefer_class_directive_1 = __importDefault(require("../rules/prefer-class-directive"));
48
48
  const prefer_destructured_store_props_1 = __importDefault(require("../rules/prefer-destructured-store-props"));
49
49
  const prefer_style_directive_1 = __importDefault(require("../rules/prefer-style-directive"));
50
+ const require_each_key_1 = __importDefault(require("../rules/require-each-key"));
50
51
  const require_event_dispatcher_types_1 = __importDefault(require("../rules/require-event-dispatcher-types"));
51
52
  const require_optimized_style_attribute_1 = __importDefault(require("../rules/require-optimized-style-attribute"));
52
53
  const require_store_callbacks_use_set_param_1 = __importDefault(require("../rules/require-store-callbacks-use-set-param"));
@@ -58,6 +59,7 @@ const sort_attributes_1 = __importDefault(require("../rules/sort-attributes"));
58
59
  const spaced_html_comment_1 = __importDefault(require("../rules/spaced-html-comment"));
59
60
  const system_1 = __importDefault(require("../rules/system"));
60
61
  const valid_compile_1 = __importDefault(require("../rules/valid-compile"));
62
+ const valid_each_key_1 = __importDefault(require("../rules/valid-each-key"));
61
63
  const valid_prop_names_in_kit_pages_1 = __importDefault(require("../rules/valid-prop-names-in-kit-pages"));
62
64
  exports.rules = [
63
65
  no_unnecessary_condition_1.default,
@@ -103,6 +105,7 @@ exports.rules = [
103
105
  prefer_class_directive_1.default,
104
106
  prefer_destructured_store_props_1.default,
105
107
  prefer_style_directive_1.default,
108
+ require_each_key_1.default,
106
109
  require_event_dispatcher_types_1.default,
107
110
  require_optimized_style_attribute_1.default,
108
111
  require_store_callbacks_use_set_param_1.default,
@@ -114,5 +117,6 @@ exports.rules = [
114
117
  spaced_html_comment_1.default,
115
118
  system_1.default,
116
119
  valid_compile_1.default,
120
+ valid_each_key_1.default,
117
121
  valid_prop_names_in_kit_pages_1.default,
118
122
  ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-svelte",
3
- "version": "2.27.4",
3
+ "version": "2.28.0",
4
4
  "description": "ESLint plugin for Svelte using AST",
5
5
  "repository": "git+https://github.com/sveltejs/eslint-plugin-svelte.git",
6
6
  "homepage": "https://sveltejs.github.io/eslint-plugin-svelte",
@@ -26,7 +26,8 @@
26
26
  "sveltejs"
27
27
  ],
28
28
  "scripts": {
29
- "build": "yarn build:ts",
29
+ "build": "yarn build:meta && yarn build:ts",
30
+ "build:meta": "yarn ts ./tools/update-meta.ts",
30
31
  "build:ts": "tsc --project ./tsconfig.build.json",
31
32
  "clean": "rimraf .nyc_output lib coverage build .svelte-kit svelte.config-dist.js",
32
33
  "cover": "nyc --reporter=lcov yarn test",
@@ -73,7 +74,7 @@
73
74
  "postcss": "^8.4.5",
74
75
  "postcss-load-config": "^3.1.4",
75
76
  "postcss-safe-parser": "^6.0.0",
76
- "svelte-eslint-parser": "^0.27.0"
77
+ "svelte-eslint-parser": "^0.28.0"
77
78
  },
78
79
  "devDependencies": {
79
80
  "@1stg/browserslist-config": "^1.2.3",
@@ -130,7 +131,7 @@
130
131
  "eslint-plugin-markdown": "^3.0.0",
131
132
  "eslint-plugin-mdx": "^2.0.2",
132
133
  "eslint-plugin-node": "^11.1.0",
133
- "eslint-plugin-node-dependencies": "^0.10.0",
134
+ "eslint-plugin-node-dependencies": "^0.11.0",
134
135
  "eslint-plugin-prettier": "^4.0.0",
135
136
  "eslint-plugin-regexp": "^1.0.0",
136
137
  "eslint-plugin-svelte": "^2.11.0",