Skip to content

Commit 7e6fb26

Browse files
authored
feat: migrate to esm-only (#144)
Moves the project to esm-only.
1 parent e96d723 commit 7e6fb26

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+862
-2854
lines changed

.github/workflows/main.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
runs-on: ubuntu-latest
1111
strategy:
1212
matrix:
13-
node-version: [16.x, 18.x, 20.x]
13+
node-version: [18.x, 20.x, 22.x]
1414
fail-fast: false
1515
steps:
1616
- name: Checkout
+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
declare module 'is-valid-element-name' {
2-
function isValidElementName(name: string): boolean;
3-
export = isValidElementName;
2+
export default function isValidElementName(name: string): boolean;
43
}

package-lock.json

+735-2,742
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+8-7
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,20 @@
33
"version": "0.0.0-dev",
44
"description": "ESLint plugin for Web Components",
55
"main": "lib/index.js",
6+
"type": "module",
67
"files": [
78
"lib/",
89
"!lib/test",
910
"docs/"
1011
],
1112
"scripts": {
12-
"clean": "rimraf ./lib",
13+
"clean": "premove ./lib",
1314
"lint": "eslint \"src/**/*.ts\"",
1415
"prebuild": "npm run clean",
1516
"build": "tsc",
1617
"start": "nodemon --watch src --ext ts --exec \"npm run dev\"",
1718
"dev": "npm run lint && npm run build && npm run test",
18-
"test": "nyc --reporter=html --reporter=text-summary --reporter=lcov mocha \"lib/test/**/*_test.js\"",
19+
"test": "c8 --reporter=html --reporter=text-summary --reporter=lcov mocha \"lib/test/**/*_test.js\"",
1920
"format": "prettier --write \"src/**/*.ts\"",
2021
"prepare": "npm run build",
2122
"prepublishOnly": "npm run lint && npm run test"
@@ -38,7 +39,7 @@
3839
"homepage": "https://github.com/43081j/eslint-plugin-wc#readme",
3940
"dependencies": {
4041
"is-valid-element-name": "^1.0.0",
41-
"js-levenshtein-esm": "^1.2.0"
42+
"js-levenshtein-esm": "^2.0.0"
4243
},
4344
"peerDependencies": {
4445
"eslint": ">=8.40.0"
@@ -48,19 +49,19 @@
4849
"@types/eslint": "^8.44.2",
4950
"@types/estree": "^1.0.1",
5051
"@types/mocha": "^10.0.1",
51-
"@types/node": "^20.5.2",
52+
"@types/node": "^22.13.10",
5253
"@typescript-eslint/eslint-plugin": "^6.4.1",
5354
"@typescript-eslint/parser": "^6.4.1",
55+
"c8": "^10.1.3",
5456
"chai": "^4.3.4",
5557
"coveralls": "^3.1.0",
5658
"eslint": "^8.47.0",
5759
"eslint-config-google": "^0.14.0",
5860
"espree": "^9.4.1",
59-
"mocha": "^10.2.0",
61+
"mocha": "^11.1.0",
6062
"nodemon": "^3.0.1",
61-
"nyc": "^15.1.0",
63+
"premove": "^4.0.0",
6264
"prettier": "^3.0.2",
63-
"rimraf": "^5.0.1",
6465
"typescript": "^5.1.6"
6566
}
6667
}

src/index.ts

+26-26
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
import type {ESLint} from 'eslint';
2-
import attachShadowConstructor from './rules/attach-shadow-constructor';
3-
import defineTagAfterClassDef from './rules/define-tag-after-class-definition';
4-
import exposeClassOnGlobal from './rules/expose-class-on-global';
5-
import filenameMatches from './rules/file-name-matches-element';
6-
import guardDefine from './rules/guard-define-call';
7-
import guardSuperCall from './rules/guard-super-call';
8-
import maxElementsPerFile from './rules/max-elements-per-file';
9-
import noChildInAttrChange from './rules/no-child-traversal-in-attributechangedcallback';
10-
import noChildInConnected from './rules/no-child-traversal-in-connectedcallback';
11-
import noClosedShadowRoot from './rules/no-closed-shadow-root';
12-
import noConstructor from './rules/no-constructor';
13-
import noConstructorAttrs from './rules/no-constructor-attributes';
14-
import noConstructorParams from './rules/no-constructor-params';
15-
import noCustomizedBuiltInElements from './rules/no-customized-built-in-elements';
16-
import noExports from './rules/no-exports-with-element';
17-
import noInvalidElementName from './rules/no-invalid-element-name';
18-
import noInvalidExtends from './rules/no-invalid-extends';
19-
import noOnPrefix from './rules/no-method-prefixed-with-on';
20-
import noSelfClass from './rules/no-self-class';
21-
import noTypos from './rules/no-typos';
22-
import {configFactory as configRecommended} from './configs/recommended';
23-
import {configFactory as configBestPractice} from './configs/best-practice';
24-
import {config as configLegacyRecommended} from './configs/legacy-recommended';
25-
import {config as configLegacyBestPractice} from './configs/legacy-best-practice';
26-
import requireListenerTeardown from './rules/require-listener-teardown';
27-
import tagMatchesClass from './rules/tag-name-matches-class';
2+
import attachShadowConstructor from './rules/attach-shadow-constructor.js';
3+
import defineTagAfterClassDef from './rules/define-tag-after-class-definition.js';
4+
import exposeClassOnGlobal from './rules/expose-class-on-global.js';
5+
import filenameMatches from './rules/file-name-matches-element.js';
6+
import guardDefine from './rules/guard-define-call.js';
7+
import guardSuperCall from './rules/guard-super-call.js';
8+
import maxElementsPerFile from './rules/max-elements-per-file.js';
9+
import noChildInAttrChange from './rules/no-child-traversal-in-attributechangedcallback.js';
10+
import noChildInConnected from './rules/no-child-traversal-in-connectedcallback.js';
11+
import noClosedShadowRoot from './rules/no-closed-shadow-root.js';
12+
import noConstructor from './rules/no-constructor.js';
13+
import noConstructorAttrs from './rules/no-constructor-attributes.js';
14+
import noConstructorParams from './rules/no-constructor-params.js';
15+
import noCustomizedBuiltInElements from './rules/no-customized-built-in-elements.js';
16+
import noExports from './rules/no-exports-with-element.js';
17+
import noInvalidElementName from './rules/no-invalid-element-name.js';
18+
import noInvalidExtends from './rules/no-invalid-extends.js';
19+
import noOnPrefix from './rules/no-method-prefixed-with-on.js';
20+
import noSelfClass from './rules/no-self-class.js';
21+
import noTypos from './rules/no-typos.js';
22+
import {configFactory as configRecommended} from './configs/recommended.js';
23+
import {configFactory as configBestPractice} from './configs/best-practice.js';
24+
import {config as configLegacyRecommended} from './configs/legacy-recommended.js';
25+
import {config as configLegacyBestPractice} from './configs/legacy-best-practice.js';
26+
import requireListenerTeardown from './rules/require-listener-teardown.js';
27+
import tagMatchesClass from './rules/tag-name-matches-class.js';
2828

2929
export const rules = {
3030
'attach-shadow-constructor': attachShadowConstructor,

src/rules/attach-shadow-constructor.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import {Rule} from 'eslint';
77
import * as ESTree from 'estree';
8-
import {isCustomElement} from '../util';
8+
import {isCustomElement} from '../util.js';
99

1010
//------------------------------------------------------------------------------
1111
// Rule Definition

src/rules/define-tag-after-class-definition.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88
import {Rule} from 'eslint';
99
import * as ESTree from 'estree';
10-
import {isCustomElement} from '../util';
11-
import {isDefineCall} from '../util/customElements';
12-
import {resolveReference} from '../util/ast';
10+
import {isCustomElement} from '../util.js';
11+
import {isDefineCall} from '../util/customElements.js';
12+
import {resolveReference} from '../util/ast.js';
1313

1414
//------------------------------------------------------------------------------
1515
// Rule Definition

src/rules/expose-class-on-global.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
import {Rule} from 'eslint';
88
import * as ESTree from 'estree';
9-
import {isCustomElement} from '../util';
10-
import {resolveReference} from '../util/ast';
9+
import {isCustomElement} from '../util.js';
10+
import {resolveReference} from '../util/ast.js';
1111

1212
//------------------------------------------------------------------------------
1313
// Rule Definition

src/rules/file-name-matches-element.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88
import {Rule} from 'eslint';
99
import * as ESTree from 'estree';
10-
import {isCustomElement, coerceArray} from '../util';
10+
import {isCustomElement, coerceArray} from '../util.js';
1111
import * as path from 'path';
12-
import {toCaseByType} from '../util/text';
12+
import {toCaseByType} from '../util/text.js';
1313

1414
/**
1515
* Computes a set of prefixed/suffixed names for a given name

src/rules/guard-define-call.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import {Rule} from 'eslint';
88
import * as ESTree from 'estree';
9-
import {isDefineCall, isGetCall} from '../util/customElements';
9+
import {isDefineCall, isGetCall} from '../util/customElements.js';
1010

1111
//------------------------------------------------------------------------------
1212
// Rule Definition

src/rules/guard-super-call.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import {Rule} from 'eslint';
88
import * as ESTree from 'estree';
9-
import {isCustomElement, isNativeCustomElement} from '../util';
9+
import {isCustomElement, isNativeCustomElement} from '../util.js';
1010

1111
//------------------------------------------------------------------------------
1212
// Rule Definition

src/rules/max-elements-per-file.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import {Rule} from 'eslint';
88
import * as ESTree from 'estree';
9-
import {isCustomElement} from '../util';
9+
import {isCustomElement} from '../util.js';
1010

1111
//------------------------------------------------------------------------------
1212
// Rule Definition

src/rules/no-child-traversal-in-attributechangedcallback.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
import {Rule} from 'eslint';
99
import * as ESTree from 'estree';
10-
import {isCustomElement} from '../util';
10+
import {isCustomElement} from '../util.js';
1111
import {
1212
childPropertyList,
1313
childMethodList,
1414
isThisOrShadowRoot
15-
} from '../util/dom';
15+
} from '../util/dom.js';
1616

1717
//------------------------------------------------------------------------------
1818
// Rule Definition

src/rules/no-child-traversal-in-connectedcallback.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
import {Rule, Scope} from 'eslint';
99
import * as ESTree from 'estree';
10-
import {isCustomElement} from '../util';
10+
import {isCustomElement} from '../util.js';
1111
import {
1212
childPropertyList,
1313
childMethodList,
1414
isThisOrShadowRoot
15-
} from '../util/dom';
15+
} from '../util/dom.js';
1616

1717
const allowedScopes = new Set<string>(['addEventListener', 'MutationObserver']);
1818

src/rules/no-constructor-attributes.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import {Rule} from 'eslint';
77
import * as ESTree from 'estree';
8-
import {isCustomElement} from '../util';
8+
import {isCustomElement} from '../util.js';
99

1010
//------------------------------------------------------------------------------
1111
// Rule Definition

src/rules/no-constructor-params.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import {Rule} from 'eslint';
77
import * as ESTree from 'estree';
8-
import {isCustomElement} from '../util';
8+
import {isCustomElement} from '../util.js';
99

1010
//------------------------------------------------------------------------------
1111
// Rule Definition

src/rules/no-constructor.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import {Rule} from 'eslint';
88
import * as ESTree from 'estree';
9-
import {isCustomElement} from '../util';
9+
import {isCustomElement} from '../util.js';
1010

1111
//------------------------------------------------------------------------------
1212
// Rule Definition

src/rules/no-customized-built-in-elements.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
import {Rule} from 'eslint';
88
import * as ESTree from 'estree';
9-
import {isCustomElement} from '../util';
10-
import {builtInTagClassList} from '../util/tag-names';
9+
import {isCustomElement} from '../util.js';
10+
import {builtInTagClassList} from '../util/tag-names.js';
1111

1212
//------------------------------------------------------------------------------
1313
// Rule Definition

src/rules/no-exports-with-element.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
import {Rule} from 'eslint';
88
import * as ESTree from 'estree';
9-
import {isCustomElement} from '../util';
10-
import {resolveReference} from '../util/ast';
9+
import {isCustomElement} from '../util.js';
10+
import {resolveReference} from '../util/ast.js';
1111

1212
const classSelector =
1313
'ExportNamedDeclaration :matches(' +

src/rules/no-invalid-element-name.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
import {Rule} from 'eslint';
77
import * as ESTree from 'estree';
8-
import isValidElementName = require('is-valid-element-name');
9-
import {knownNamespaces} from '../util/tag-names';
10-
import {isDefineCall} from '../util/customElements';
8+
import isValidElementName from 'is-valid-element-name';
9+
import {knownNamespaces} from '../util/tag-names.js';
10+
import {isDefineCall} from '../util/customElements.js';
1111

1212
//------------------------------------------------------------------------------
1313
// Rule Definition

src/rules/no-invalid-extends.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66

77
import {Rule} from 'eslint';
88
import * as ESTree from 'estree';
9-
import {isCustomElement, getElementBaseClasses} from '../util';
10-
import {isDefineCall} from '../util/customElements';
11-
import {resolveReference} from '../util/ast';
12-
import {builtInTagClassMap} from '../util/tag-names';
9+
import {isCustomElement, getElementBaseClasses} from '../util.js';
10+
import {isDefineCall} from '../util/customElements.js';
11+
import {resolveReference} from '../util/ast.js';
12+
import {builtInTagClassMap} from '../util/tag-names.js';
1313

1414
/**
1515
* Computes the `extends` option from a `customElements.define` third

src/rules/no-method-prefixed-with-on.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
import {Rule} from 'eslint';
88
import * as ESTree from 'estree';
9-
import {isCustomElement} from '../util';
10-
import {getMethodName} from '../util/ast';
9+
import {isCustomElement} from '../util.js';
10+
import {getMethodName} from '../util/ast.js';
1111

1212
//------------------------------------------------------------------------------
1313
// Rule Definition

src/rules/no-self-class.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import {Rule} from 'eslint';
77
import * as ESTree from 'estree';
8-
import {isCustomElement} from '../util';
8+
import {isCustomElement} from '../util.js';
99

1010
//------------------------------------------------------------------------------
1111
// Rule Definition

src/rules/no-typos.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import {Rule} from 'eslint';
77
import * as ESTree from 'estree';
8-
import {isCustomElement} from '../util';
8+
import {isCustomElement} from '../util.js';
99
import levenshtein from 'js-levenshtein-esm';
1010

1111
//------------------------------------------------------------------------------

src/rules/tag-name-matches-class.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77

88
import {Rule} from 'eslint';
99
import * as ESTree from 'estree';
10-
import {coerceArray} from '../util';
11-
import {toKebabCase} from '../util/text';
10+
import {coerceArray} from '../util.js';
11+
import {toKebabCase} from '../util/text.js';
1212

1313
/**
1414
* Removes a set of prefixes and suffixes from a string if it contains them

src/test/configs_test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type {ESLint, Linter} from 'eslint';
22
import {expect} from 'chai';
3-
import {configs} from '../index';
3+
import {configs} from '../index.js';
44

55
type ConfigLike = Linter.FlatConfig | ESLint.ConfigData;
66

src/test/rules/attach-shadow-constructor_test.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
// Requirements
88
//------------------------------------------------------------------------------
99

10-
import rule from '../../rules/attach-shadow-constructor';
10+
import {fileURLToPath} from 'node:url';
11+
import rule from '../../rules/attach-shadow-constructor.js';
1112
import {RuleTester} from 'eslint';
1213

1314
//------------------------------------------------------------------------------
@@ -21,7 +22,7 @@ const ruleTester = new RuleTester({
2122
}
2223
});
2324

24-
const parser = require.resolve('@typescript-eslint/parser');
25+
const parser = fileURLToPath(import.meta.resolve('@typescript-eslint/parser'));
2526

2627
ruleTester.run('attach-shadow-constructor', rule, {
2728
valid: [

src/test/rules/define-tag-after-class-definition_test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
//------------------------------------------------------------------------------
1111

12-
import rule from '../../rules/define-tag-after-class-definition';
12+
import rule from '../../rules/define-tag-after-class-definition.js';
1313
import {RuleTester} from 'eslint';
1414

1515
//------------------------------------------------------------------------------

src/test/rules/expose-class-on-global_test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// Requirements
1010
//------------------------------------------------------------------------------
1111

12-
import rule from '../../rules/expose-class-on-global';
12+
import rule from '../../rules/expose-class-on-global.js';
1313
import {RuleTester} from 'eslint';
1414

1515
//------------------------------------------------------------------------------

0 commit comments

Comments
 (0)