@progressive-victory/eslint-plugin-index-file 1.1.0 → 1.1.2

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.d.ts CHANGED
@@ -6,6 +6,7 @@ declare const plugin: {
6
6
  };
7
7
  rules: {
8
8
  "eslint-plugin-index-file/enforce-index-usage": string;
9
+ "eslint-plugin-index-file/enforce-import-from-index": string;
9
10
  };
10
11
  };
11
12
  };
@@ -104,7 +105,10 @@ declare const plugin: {
104
105
  };
105
106
  };
106
107
  rules: {
107
- "enforce-index-usage": import("@typescript-eslint/utils/ts-eslint").RuleModule<"notExportedInIndex" | "noIndexPresent", [], import("./utils.js").IndexFileDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
108
+ "enforce-index-usage": import("@typescript-eslint/utils/ts-eslint").RuleModule<"noIndexPresent" | "notExportedInIndex", [], import("./utils.js").IndexFileDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
109
+ name: string;
110
+ };
111
+ "enforce-import-from-index": import("@typescript-eslint/utils/ts-eslint").RuleModule<"importDoesNotTargetIndex", [], import("./utils.js").IndexFileDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
108
112
  name: string;
109
113
  };
110
114
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUX,CAAA;AAWD,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWX,CAAA;AAYD,eAAe,MAAM,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { enforceIndexUsageRule } from "./rules/index.js";
1
+ import { enforceIndexExportRule, enforceIndexImportRule } from "./rules/index.js";
2
2
  import name from "../package.json" with { type: "json" };
3
3
  import version from "../package.json" with { type: "json" };
4
4
  const plugin = {
@@ -9,7 +9,8 @@ const plugin = {
9
9
  },
10
10
  meta: { name, version },
11
11
  rules: {
12
- "enforce-index-usage": enforceIndexUsageRule
12
+ "enforce-index-usage": enforceIndexExportRule,
13
+ "enforce-import-from-index": enforceIndexImportRule
13
14
  }
14
15
  };
15
16
  const recommended = {
@@ -17,7 +18,8 @@ const recommended = {
17
18
  "eslint-plugin-index-file": plugin
18
19
  },
19
20
  rules: {
20
- "eslint-plugin-index-file/enforce-index-usage": "error"
21
+ "eslint-plugin-index-file/enforce-index-usage": "error",
22
+ "eslint-plugin-index-file/enforce-import-from-index": "error"
21
23
  }
22
24
  };
23
25
  export default plugin;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,kBAAkB,CAAA;AACtD,OAAO,IAAI,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACzD,OAAO,OAAO,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE5D,MAAM,MAAM,GAAG;IACX,OAAO,EAAE;QACL,IAAI,WAAW;YACX,OAAO,WAAW,CAAA;QACtB,CAAC;KACJ;IACD,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;IACvB,KAAK,EAAE;QACH,qBAAqB,EAAE,qBAAqB;KAC/C;CACJ,CAAA;AAED,MAAM,WAAW,GAAG;IAChB,OAAO,EAAE;QACL,0BAA0B,EAAE,MAAM;KACrC;IACD,KAAK,EAAE;QACH,8CAA8C,EAAE,OAAO;KAC1D;CACJ,CAAA;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAE,sBAAsB,EAAC,MAAM,kBAAkB,CAAA;AAC/E,OAAO,IAAI,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACzD,OAAO,OAAO,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE5D,MAAM,MAAM,GAAG;IACX,OAAO,EAAE;QACL,IAAI,WAAW;YACX,OAAO,WAAW,CAAA;QACtB,CAAC;KACJ;IACD,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;IACvB,KAAK,EAAE;QACH,qBAAqB,EAAE,sBAAsB;QAC7C,2BAA2B,EAAE,sBAAsB;KACtD;CACJ,CAAA;AAED,MAAM,WAAW,GAAG;IAChB,OAAO,EAAE;QACL,0BAA0B,EAAE,MAAM;KACrC;IACD,KAAK,EAAE;QACH,8CAA8C,EAAE,OAAO;QACvD,oDAAoD,EAAE,OAAO;KAChE;CACJ,CAAA;AAED,eAAe,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const enforceIndexExportRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"noIndexPresent" | "notExportedInIndex", [], import("../utils.js").IndexFileDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
4
+ //# sourceMappingURL=enforce-index-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforce-index-export.d.ts","sourceRoot":"","sources":["../../src/rules/enforce-index-export.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,sBAAsB;;CA0BjC,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { createRule } from "../utils.js";
2
+ import path from "node:path";
3
+ import fs from "fs";
4
+ function handleExport(context, node) {
5
+ const filePathStr = path.resolve(context.physicalFilename);
6
+ const filePath = path.parse(filePathStr);
7
+ const cwd = filePath.dir;
8
+ const cwdFiles = fs.readdirSync(cwd);
9
+ const index = cwdFiles.find(x => x === "index.ts");
10
+ if (!index)
11
+ context.report({
12
+ messageId: 'noIndexPresent',
13
+ node
14
+ });
15
+ const indexContent = fs.readFileSync(path.join(cwd, "index.ts")).toString();
16
+ const regExStr = `export \\* from ['|"]\\.\\/${filePath.name}(\\.js|)['|"](;|)`;
17
+ const pattern = new RegExp(regExStr);
18
+ if (!pattern.test(indexContent))
19
+ context.report({
20
+ messageId: "notExportedInIndex",
21
+ node
22
+ });
23
+ }
24
+ export const enforceIndexExportRule = createRule({
25
+ create(context) {
26
+ return {
27
+ ExportNamedDeclaration(node) {
28
+ handleExport(context, node);
29
+ },
30
+ ExportDefaultDeclaration(node) {
31
+ handleExport(context, node);
32
+ }
33
+ };
34
+ },
35
+ meta: {
36
+ docs: {
37
+ description: "Enforces the usage of index files within code.",
38
+ recommended: true,
39
+ requiresTypeChecking: false
40
+ },
41
+ messages: {
42
+ notExportedInIndex: "Export statement not accompanied by index file entry.",
43
+ noIndexPresent: "Could not find index file in working directory."
44
+ },
45
+ type: "problem",
46
+ schema: []
47
+ },
48
+ name: "enforce-index-usage",
49
+ defaultOptions: []
50
+ });
51
+ //# sourceMappingURL=enforce-index-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforce-index-export.js","sourceRoot":"","sources":["../../src/rules/enforce-index-export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,IAAI,CAAA;AAInB,SAAS,YAAY,CAAC,OAAiE,EAAE,IAAoC;IACzH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAA;IACxB,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,CAAA;IAClD,IAAG,CAAC,KAAK;QAAE,OAAO,CAAC,MAAM,CAAC;YAClB,SAAS,EAAE,gBAAgB;YAC3B,IAAI;SACP,CAAC,CAAA;IAEN,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC3E,MAAM,QAAQ,GAAG,8BAA8B,QAAQ,CAAC,IAAI,mBAAmB,CAAA;IAC/E,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAA;IACpC,IAAG,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC;YAC3C,SAAS,EAAE,oBAAoB;YAC/B,IAAI;SACP,CAAC,CAAA;AACN,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;IAC7C,MAAM,CAAC,OAAO;QACV,OAAO;YACH,sBAAsB,CAAC,IAAI;gBACvB,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAC/B,CAAC;YACD,wBAAwB,CAAC,IAAI;gBACzB,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAC/B,CAAC;SACJ,CAAA;IACL,CAAC;IACD,IAAI,EAAE;QACF,IAAI,EAAE;YACF,WAAW,EAAE,gDAAgD;YAC7D,WAAW,EAAE,IAAI;YACjB,oBAAoB,EAAE,KAAK;SAC9B;QACD,QAAQ,EAAE;YACN,kBAAkB,EAAE,uDAAuD;YAC3E,cAAc,EAAE,iDAAiD;SACpE;QACD,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,EAAE;KACb;IACD,IAAI,EAAE,qBAAqB;IAC3B,cAAc,EAAE,EAAE;CACrB,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare const enforceIndexImportRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"importDoesNotTargetIndex", [], import("../utils").IndexFileDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
4
+ //# sourceMappingURL=enforce-index-import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforce-index-import.d.ts","sourceRoot":"","sources":["../../src/rules/enforce-index-import.ts"],"names":[],"mappings":"AAsCA,eAAO,MAAM,sBAAsB;;CAyDjC,CAAA"}
@@ -0,0 +1,93 @@
1
+ import path from 'path';
2
+ import { createRule } from '../utils';
3
+ import { getParserServices } from '@typescript-eslint/utils/eslint-utils';
4
+ import fs from 'fs';
5
+ function testAlliases(importStr, compilerAliases) {
6
+ for (let i = 0; i < compilerAliases.length; i++) {
7
+ const alias = compilerAliases[i];
8
+ if (!alias)
9
+ throw Error("Alias index out of bounds");
10
+ const aliasTrimmed = alias.replaceAll('*', '');
11
+ const patternStr = `^${aliasTrimmed}`;
12
+ const pattern = new RegExp(patternStr);
13
+ if (pattern.test(importStr))
14
+ return true;
15
+ }
16
+ return false;
17
+ }
18
+ function getImportType(importStr, compilerOpts) {
19
+ const compilerAliases = Object.keys(compilerOpts.paths ?? {});
20
+ const relativePattern = new RegExp("^\\.{1,2}\\/");
21
+ const modulePattern = new RegExp("^[@|\\w]");
22
+ switch (true) {
23
+ case relativePattern.test(importStr):
24
+ return "relative";
25
+ case modulePattern.test(importStr):
26
+ return "module";
27
+ case !!compilerAliases && testAlliases(importStr, compilerAliases):
28
+ return "aliased";
29
+ default:
30
+ throw Error("Unable to identify import type");
31
+ }
32
+ }
33
+ export const enforceIndexImportRule = createRule({
34
+ create(context) {
35
+ const services = getParserServices(context);
36
+ return {
37
+ ImportDeclaration(node) {
38
+ const importStr = node.source.value;
39
+ const compilerOpts = services.program.getCompilerOptions();
40
+ const importType = getImportType(importStr, compilerOpts);
41
+ let resolvedPath;
42
+ switch (importType) {
43
+ case "relative":
44
+ const filePathStr = path.resolve(context.physicalFilename);
45
+ const filePath = path.parse(filePathStr);
46
+ resolvedPath = path.resolve(filePath.dir, importStr);
47
+ break;
48
+ case 'aliased':
49
+ const splitImport = importStr.split('/');
50
+ const aliasStr = splitImport[0];
51
+ const aliases = compilerOpts.paths;
52
+ if (!aliases || !aliasStr)
53
+ throw Error("Aliased import string has no alias.");
54
+ const alias = Object.keys(aliases).find(x => x.includes(aliasStr));
55
+ if (!alias)
56
+ throw Error("Could not retrieve alias entry.");
57
+ const aliasPath = aliases[alias]?.[0]?.replace('*', '');
58
+ if (!aliasPath)
59
+ throw Error("Alias has no path.");
60
+ const absoluteAliasPath = path.resolve(context.cwd, aliasPath);
61
+ splitImport.splice(0, 1);
62
+ resolvedPath = path.join(absoluteAliasPath, ...splitImport);
63
+ break;
64
+ case "module":
65
+ return;
66
+ }
67
+ resolvedPath = fs.existsSync(resolvedPath) ? resolvedPath : resolvedPath.concat(".ts");
68
+ if (!resolvedPath)
69
+ return;
70
+ if (!fs.lstatSync(resolvedPath).isDirectory())
71
+ context.report({
72
+ messageId: "importDoesNotTargetIndex",
73
+ node
74
+ });
75
+ }
76
+ };
77
+ },
78
+ meta: {
79
+ docs: {
80
+ description: "Enforces import statements referencing index files, instead of source files.",
81
+ recommended: true,
82
+ requiresTypeChecking: false
83
+ },
84
+ messages: {
85
+ importDoesNotTargetIndex: "Import statement should target the index of the source, not the source itself."
86
+ },
87
+ type: "problem",
88
+ schema: []
89
+ },
90
+ name: "enforce-import-from-index",
91
+ defaultOptions: []
92
+ });
93
+ //# sourceMappingURL=enforce-index-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforce-index-import.js","sourceRoot":"","sources":["../../src/rules/enforce-index-import.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- export * from './enforce-index-usage.js';
1
+ export * from './enforce-index-export.js';
2
+ export * from './enforce-index-import.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA"}
@@ -1,2 +1,3 @@
1
- export * from './enforce-index-usage.js';
1
+ export * from './enforce-index-export.js';
2
+ export * from './enforce-index-import.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=enforce-index-import.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforce-index-import.test.d.ts","sourceRoot":"","sources":["../../src/tests/enforce-index-import.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { RuleTester } from "@typescript-eslint/rule-tester";
2
+ import { enforceIndexImportRule } from "../rules/enforce-index-import";
3
+ import * as vitest from "vitest";
4
+ import path from "path";
5
+ RuleTester.afterAll = vitest.afterAll;
6
+ RuleTester.describe = vitest.describe;
7
+ RuleTester.it = vitest.it;
8
+ RuleTester.itOnly = vitest.it.only;
9
+ const ruleTester = new RuleTester({
10
+ ignores: ['dist'],
11
+ languageOptions: {
12
+ parserOptions: {
13
+ projectService: {
14
+ allowDefaultProject: ['*.ts']
15
+ },
16
+ tsconfigRootDir: path.join(import.meta.dirname, "../..")
17
+ }
18
+ }
19
+ });
20
+ ruleTester.run('enforce-import-from-index', enforceIndexImportRule, {
21
+ valid: [
22
+ {
23
+ code: "import {foo} from './bar'"
24
+ },
25
+ {
26
+ code: "import {foo} from '../bar'"
27
+ },
28
+ {
29
+ code: "import {foo} from '@typescript-eslint/utils/eslint-utils'"
30
+ },
31
+ {
32
+ code: "import {foo} from '~/bar'"
33
+ },
34
+ ],
35
+ invalid: [
36
+ {
37
+ code: "import {foo} from './bar/file'",
38
+ errors: [
39
+ {
40
+ messageId: "importDoesNotTargetIndex"
41
+ }
42
+ ]
43
+ },
44
+ ]
45
+ });
46
+ //# sourceMappingURL=enforce-index-import.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforce-index-import.test.js","sourceRoot":"","sources":["../../src/tests/enforce-index-import.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtC,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtC,UAAU,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;AAC1B,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;AAEnC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;IAC9B,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,eAAe,EAAE;QACb,aAAa,EAAE;YACX,cAAc,EAAE;gBACZ,mBAAmB,EAAE,CAAC,MAAM,CAAC;aAChC;YACD,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;SAC3D;KACJ;CACJ,CAAC,CAAC;AAEH,UAAU,CAAC,GAAG,CAAC,2BAA2B,EAAE,sBAAsB,EAAE;IAChE,KAAK,EAAE;QACH;YACI,IAAI,EAAE,2BAA2B;SACpC;QACD;YACI,IAAI,EAAE,4BAA4B;SACrC;QACD;YACI,IAAI,EAAE,2DAA2D;SACpE;QACD;YACI,IAAI,EAAE,2BAA2B;SACpC;KACJ;IACD,OAAO,EAAE;QACL;YACI,IAAI,EAAE,gCAAgC;YACtC,MAAM,EAAE;gBACJ;oBACI,SAAS,EAAE,0BAA0B;iBACxC;aACJ;SACJ;KACJ;CACJ,CAAC,CAAA"}
@@ -1,12 +1,12 @@
1
1
  import { RuleTester } from "@typescript-eslint/rule-tester";
2
- import { enforceIndexUsageRule } from "../rules/enforce-index-usage";
2
+ import { enforceIndexExportRule } from "../rules/enforce-index-export";
3
3
  import * as vitest from "vitest";
4
4
  RuleTester.afterAll = vitest.afterAll;
5
5
  RuleTester.describe = vitest.describe;
6
6
  RuleTester.it = vitest.it;
7
7
  RuleTester.itOnly = vitest.it.only;
8
8
  const ruleTester = new RuleTester();
9
- ruleTester.run('enforce-index-usage', enforceIndexUsageRule, {
9
+ ruleTester.run('enforce-index-usage', enforceIndexExportRule, {
10
10
  valid: [
11
11
  {
12
12
  code: "export const foo = 'bar'",
@@ -1 +1 @@
1
- {"version":3,"file":"enforce-index-usage.test.js","sourceRoot":"","sources":["../../src/tests/enforce-index-usage.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAC,qBAAqB,EAAC,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAEhC,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;AACrC,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtC,UAAU,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;AAC1B,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;AAEnC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AAEpC,UAAU,CAAC,GAAG,CAAC,qBAAqB,EAAE,qBAAqB,EAAE;IACzD,KAAK,EAAE;QACH;YACI,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,UAAU;SACvB;KACJ;IACD,OAAO,EAAE;QACL;YACI,IAAI,EAAE,0BAA0B;YAChC,MAAM,EAAE;gBACJ;oBACI,SAAS,EAAE,oBAAoB;iBAClC;aACJ;SACJ;KACJ;CACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"enforce-index-usage.test.js","sourceRoot":"","sources":["../../src/tests/enforce-index-usage.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAC,sBAAsB,EAAC,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtC,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtC,UAAU,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;AAC1B,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;AAEnC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AAEpC,UAAU,CAAC,GAAG,CAAC,qBAAqB,EAAE,sBAAsB,EAAE;IAC1D,KAAK,EAAE;QACH;YACI,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,UAAU;SACvB;KACJ;IACD,OAAO,EAAE;QACL;YACI,IAAI,EAAE,0BAA0B;YAChC,MAAM,EAAE;gBACJ;oBACI,SAAS,EAAE,oBAAoB;iBAClC;aACJ;SACJ;KACJ;CACJ,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progressive-victory/eslint-plugin-index-file",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "Plugin that enforces the use of index files with eslint.",
5
5
  "homepage": "https://github.com/Progressive-Victory/eslint-index-file-plugin#readme",
6
6
  "bugs": {