@isentinel/eslint-config 6.0.0-beta.21 → 6.0.0-beta.23
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 +31 -0
- package/dist/cli.mjs +13 -12
- package/dist/index.d.mts +211 -98
- package/dist/index.mjs +103 -42
- package/dist/lint-cli.mjs +6 -6
- package/dist/oxlint.d.mts +271 -165
- package/dist/oxlint.mjs +186 -9
- package/package.json +23 -22
package/dist/oxlint.mjs
CHANGED
|
@@ -18,7 +18,7 @@ import globals from "globals";
|
|
|
18
18
|
const staysInEslint = {
|
|
19
19
|
"e18e/* (optionally type-aware)": "Four e18e rules (prefer-array-at, prefer-array-to-reversed, prefer-array-to-sorted, prefer-spread-syntax) run without type information but detect more with it, so they stay in ESLint (see optionallyTypeAwareRules); the rest run in oxlint as a jsPlugin",
|
|
20
20
|
"eslint-comments/*": "Lints eslint-disable directives, which only exist in ESLint-linted code; oxlint-comments covers oxlint directives",
|
|
21
|
-
"flawless/naming-convention": "Type-aware custom rule; oxlint jsPlugins have no type information. The syntax-only flawless rules (arrow-return-style, max-lines-per-function, no-export-default-arrow, padding-after-expect-assertions, prefer-parameter-destructuring, the react jsx-shorthand-*, purity, no-unnecessary-use-*, prefer-destructuring-assignment) are mapped and run in oxlint. flawless/no-redundant-tsconfig-options, flawless/toml-* and flawless/yaml-* lint non-JS files and stay in ESLint",
|
|
21
|
+
"flawless/naming-convention": "Type-aware custom rule; oxlint jsPlugins have no type information. The syntax-only flawless rules (arrow-return-style, max-lines-per-function, no-conditional-in-test, no-export-default-arrow, padding-after-expect-assertions, prefer-ending-with-an-expect, prefer-expect-assertions-count, prefer-parameter-destructuring, the react jsx-shorthand-*, purity, no-unnecessary-use-*, prefer-destructuring-assignment) are mapped and run in oxlint. flawless/no-redundant-tsconfig-options, flawless/toml-* and flawless/yaml-* lint non-JS files and stay in ESLint",
|
|
22
22
|
"flawless/prefer-read-only-props": "Type-aware custom rule; oxlint jsPlugins have no type information",
|
|
23
23
|
"format-lua/*": "Oxlint cannot lint Lua files",
|
|
24
24
|
"jest/* (type-aware)": "Four type-aware jest rules stay in ESLint (see typeAwareJsPluginRules); the rest run in oxlint via eslint-plugin-jest as a jsPlugin (renamed jest-js, since oxlint reserves the native jest prefix), which honors settings.jest.globalPackage = @rbxts/jest-globals (the NATIVE oxlint jest plugin does not, https://github.com/oxc-project/oxc/issues/23290)",
|
|
@@ -534,11 +534,14 @@ const oxlintRuleMapping = {
|
|
|
534
534
|
"flawless/jsx-shorthand-boolean": "js-plugin",
|
|
535
535
|
"flawless/jsx-shorthand-fragment": "js-plugin",
|
|
536
536
|
"flawless/max-lines-per-function": "js-plugin",
|
|
537
|
+
"flawless/no-conditional-in-test": "js-plugin",
|
|
537
538
|
"flawless/no-export-default-arrow": "js-plugin",
|
|
538
539
|
"flawless/no-unnecessary-use-callback": "js-plugin",
|
|
539
540
|
"flawless/no-unnecessary-use-memo": "js-plugin",
|
|
540
541
|
"flawless/padding-after-expect-assertions": "js-plugin",
|
|
541
542
|
"flawless/prefer-destructuring-assignment": "js-plugin",
|
|
543
|
+
"flawless/prefer-ending-with-an-expect": "js-plugin",
|
|
544
|
+
"flawless/prefer-expect-assertions-count": "js-plugin",
|
|
542
545
|
"flawless/prefer-parameter-destructuring": "js-plugin",
|
|
543
546
|
"flawless/purity": "js-plugin",
|
|
544
547
|
"react/error-boundaries": "js-plugin",
|
|
@@ -658,7 +661,6 @@ const oxlintRuleMapping = {
|
|
|
658
661
|
"vitest/no-alias-methods": "native",
|
|
659
662
|
"vitest/no-commented-out-tests": "native",
|
|
660
663
|
"vitest/no-conditional-expect": "native",
|
|
661
|
-
"vitest/no-conditional-in-test": "native",
|
|
662
664
|
"vitest/no-conditional-tests": "native",
|
|
663
665
|
"vitest/no-disabled-tests": "native",
|
|
664
666
|
"vitest/no-duplicate-hooks": "native",
|
|
@@ -1428,6 +1430,19 @@ function isRecord(value) {
|
|
|
1428
1430
|
}
|
|
1429
1431
|
createRequire(import.meta.url);
|
|
1430
1432
|
/**
|
|
1433
|
+
* Synchronous {@link findWorkspaceRoot}, for the oxlint factory.
|
|
1434
|
+
*
|
|
1435
|
+
* The oxlint factory is synchronous, so it cannot await the async variant.
|
|
1436
|
+
*
|
|
1437
|
+
* @param cwd - The directory to resolve from, defaulting to the current
|
|
1438
|
+
* working directory.
|
|
1439
|
+
* @returns The absolute path of the workspace root directory.
|
|
1440
|
+
*/
|
|
1441
|
+
function findWorkspaceRootSync(cwd = process.cwd()) {
|
|
1442
|
+
const workspaceFile = findUpSync("pnpm-workspace.yaml", { cwd });
|
|
1443
|
+
return workspaceFile === void 0 ? cwd : path.dirname(workspaceFile);
|
|
1444
|
+
}
|
|
1445
|
+
/**
|
|
1431
1446
|
* Whether the environment signals a CI run. Treats an unset, empty, `"false"`
|
|
1432
1447
|
* or `"0"` `CI` value as not-CI, so a deliberately falsy `CI=false` is honoured
|
|
1433
1448
|
* rather than read as truthy.
|
|
@@ -2046,14 +2061,133 @@ function oxlintComments({ prettierOptions = {}, stylistic = true } = {}) {
|
|
|
2046
2061
|
];
|
|
2047
2062
|
}
|
|
2048
2063
|
//#endregion
|
|
2064
|
+
//#region src/anchors.ts
|
|
2065
|
+
/**
|
|
2066
|
+
* Matches a glob that anchors on one or more literal ancestor directory names,
|
|
2067
|
+
* capturing the run of literal segments that follows the leading `**\/`.
|
|
2068
|
+
*
|
|
2069
|
+
* `**\/scripts/**\/*.ts` captures `scripts/`, and `**\/.github/scripts/**\/*`
|
|
2070
|
+
* captures `.github/scripts/`. Basename anchors such as `**\/*config.ts` or
|
|
2071
|
+
* `**\/cli.ts` do not match, because the segment after `**\/` is not literal.
|
|
2072
|
+
*/
|
|
2073
|
+
const ANCESTOR_ANCHOR = /^\*\*\/((?:[^*?{}[\]/]+\/)+)/;
|
|
2074
|
+
/**
|
|
2075
|
+
* Resolves a config directory to a workspace-root-relative path.
|
|
2076
|
+
*
|
|
2077
|
+
* Comparison has to happen in workspace-root-relative terms: matching against
|
|
2078
|
+
* absolute paths would let a checkout living at `C:\dev\scripts\repo` satisfy a
|
|
2079
|
+
* `**\/scripts/` anchor for every project in it.
|
|
2080
|
+
*
|
|
2081
|
+
* @param configDirectory - The absolute directory of the config being generated.
|
|
2082
|
+
* @param workspaceRoot - The absolute workspace root.
|
|
2083
|
+
* @returns The relative path with POSIX separators, or `undefined` when the
|
|
2084
|
+
* config sits at or outside the workspace root.
|
|
2085
|
+
*/
|
|
2086
|
+
function workspaceRelativeDirectory(configDirectory, workspaceRoot) {
|
|
2087
|
+
const relative = path.relative(workspaceRoot, configDirectory);
|
|
2088
|
+
if (relative === "" || relative.startsWith("..") || path.isAbsolute(relative)) return;
|
|
2089
|
+
return relative.split(path.sep).join("/");
|
|
2090
|
+
}
|
|
2091
|
+
/**
|
|
2092
|
+
* Rewrites an ancestor-anchored glob so it still matches from a config that
|
|
2093
|
+
* already lives inside the anchored directory.
|
|
2094
|
+
*
|
|
2095
|
+
* The original pattern is always kept, so a directory of the same name nested
|
|
2096
|
+
* beneath the config keeps matching. When the config's own path already
|
|
2097
|
+
* satisfies the anchor, an additional anchor-stripped variant is emitted:
|
|
2098
|
+
* `**\/scripts/**\/*.ts` from a config at `scripts/` also yields `**\/*.ts`.
|
|
2099
|
+
*
|
|
2100
|
+
* A partial anchor is only honoured when it matches the tail of the config's
|
|
2101
|
+
* path — a config at `.github/foo` cannot satisfy `**\/.github/scripts/`,
|
|
2102
|
+
* because nothing below it lives in `.github/scripts`.
|
|
2103
|
+
*
|
|
2104
|
+
* This exists because oxlint has no per-override base path: `basePath` is a
|
|
2105
|
+
* hard parse error, and the upstream knob is still unresolved
|
|
2106
|
+
* (oxc-project/oxc#24276). The ESLint side uses `basePath` instead and needs no
|
|
2107
|
+
* rewrite.
|
|
2108
|
+
*
|
|
2109
|
+
* @param pattern - The glob to rewrite.
|
|
2110
|
+
* @param relativeConfigDirectory - The config's directory, relative to the workspace
|
|
2111
|
+
* root, POSIX-separated.
|
|
2112
|
+
* @returns The patterns to emit, always including the original.
|
|
2113
|
+
*/
|
|
2114
|
+
function rebaseAncestorAnchor(pattern, relativeConfigDirectory) {
|
|
2115
|
+
const anchor = splitAncestorAnchor(pattern);
|
|
2116
|
+
if (anchor === void 0) return [pattern];
|
|
2117
|
+
const directorySegments = relativeConfigDirectory.split("/").filter((segment) => segment !== "");
|
|
2118
|
+
if (directorySegments.length === 0) return [pattern];
|
|
2119
|
+
const { segments, tail } = anchor;
|
|
2120
|
+
for (let { length } = segments; length > 0; length -= 1) {
|
|
2121
|
+
const run = segments.slice(0, length);
|
|
2122
|
+
if (length === segments.length ? containsRun(directorySegments, run) : endsWithRun(directorySegments, run)) return [pattern, [...segments.slice(length), tail].join("/")];
|
|
2123
|
+
}
|
|
2124
|
+
return [pattern];
|
|
2125
|
+
}
|
|
2126
|
+
/**
|
|
2127
|
+
* Splits a glob into its literal ancestor-directory anchor and the tail matched
|
|
2128
|
+
* beneath it.
|
|
2129
|
+
*
|
|
2130
|
+
* @param pattern - The glob to inspect.
|
|
2131
|
+
* @returns The anchor segments and tail, or `undefined` when the pattern is not
|
|
2132
|
+
* anchored on an ancestor directory.
|
|
2133
|
+
*/
|
|
2134
|
+
function splitAncestorAnchor(pattern) {
|
|
2135
|
+
const match = ANCESTOR_ANCHOR.exec(pattern);
|
|
2136
|
+
if (match === null) return;
|
|
2137
|
+
const [matched, literal] = match;
|
|
2138
|
+
if (literal === void 0) return;
|
|
2139
|
+
const tail = pattern.slice(matched.length);
|
|
2140
|
+
if (tail === "") return;
|
|
2141
|
+
return {
|
|
2142
|
+
segments: literal.split("/").filter((segment) => segment !== ""),
|
|
2143
|
+
tail
|
|
2144
|
+
};
|
|
2145
|
+
}
|
|
2146
|
+
/**
|
|
2147
|
+
* Whether `run` appears in `segments` as a contiguous slice ending at its end.
|
|
2148
|
+
*
|
|
2149
|
+
* @param segments - The segments to search.
|
|
2150
|
+
* @param run - The contiguous run to look for.
|
|
2151
|
+
* @returns Whether `segments` ends with `run`.
|
|
2152
|
+
*/
|
|
2153
|
+
function endsWithRun(segments, run) {
|
|
2154
|
+
if (run.length > segments.length) return false;
|
|
2155
|
+
const offset = segments.length - run.length;
|
|
2156
|
+
return run.every((segment, index) => segments[offset + index] === segment);
|
|
2157
|
+
}
|
|
2158
|
+
/**
|
|
2159
|
+
* Whether `run` appears anywhere in `segments` as a contiguous slice.
|
|
2160
|
+
*
|
|
2161
|
+
* @param segments - The segments to search.
|
|
2162
|
+
* @param run - The contiguous run to look for.
|
|
2163
|
+
* @returns Whether `segments` contains `run`.
|
|
2164
|
+
*/
|
|
2165
|
+
function containsRun(segments, run) {
|
|
2166
|
+
for (let start = 0; start + run.length <= segments.length; start += 1) if (run.every((segment, index) => segments[start + index] === segment)) return true;
|
|
2167
|
+
return false;
|
|
2168
|
+
}
|
|
2169
|
+
//#endregion
|
|
2049
2170
|
//#region src/oxlint/configs/disables.ts
|
|
2050
|
-
|
|
2051
|
-
|
|
2171
|
+
/**
|
|
2172
|
+
* Rule relaxations keyed on where a file lives.
|
|
2173
|
+
*
|
|
2174
|
+
* @param options - The resolved factory options.
|
|
2175
|
+
* @param options.configDirectory - The directory holding the consuming config,
|
|
2176
|
+
* used to widen ancestor-anchored globs. Documented on the factory's
|
|
2177
|
+
* `configDirectory` option.
|
|
2178
|
+
* @param options.root - Globs identifying root-level files.
|
|
2179
|
+
* @param options.workspaceRoot - Absolute workspace root.
|
|
2180
|
+
* @returns The disables configs.
|
|
2181
|
+
*/
|
|
2182
|
+
function oxlintDisables({ configDirectory, root, workspaceRoot }) {
|
|
2183
|
+
const relativeConfigDirectory = configDirectory === void 0 ? void 0 : workspaceRelativeDirectory(configDirectory, workspaceRoot);
|
|
2184
|
+
return rebaseAnchoredFiles([
|
|
2052
2185
|
...createOxlintConfigs({
|
|
2053
2186
|
name: "isentinel/disables/scripts",
|
|
2054
2187
|
files: [`**/scripts/${GLOB_SRC}`],
|
|
2055
2188
|
rules: {
|
|
2056
2189
|
"antfu/no-top-level-await": "off",
|
|
2190
|
+
"max-lines": "off",
|
|
2057
2191
|
"no-console": "off",
|
|
2058
2192
|
"small-rules/require-async-suffix": "off",
|
|
2059
2193
|
"ts/explicit-function-return-type": "off"
|
|
@@ -2150,7 +2284,32 @@ function oxlintDisables({ root }) {
|
|
|
2150
2284
|
files: [GLOB_JSX, GLOB_TSX],
|
|
2151
2285
|
rules: { "flawless/max-lines-per-function": "off" }
|
|
2152
2286
|
})
|
|
2153
|
-
];
|
|
2287
|
+
], relativeConfigDirectory);
|
|
2288
|
+
}
|
|
2289
|
+
/**
|
|
2290
|
+
* Rewrites ancestor-anchored `files` globs so they still match from a nested
|
|
2291
|
+
* config.
|
|
2292
|
+
*
|
|
2293
|
+
* Applied to every block rather than a curated list, so a block added later
|
|
2294
|
+
* with a directory anchor is covered without anyone remembering to opt it in.
|
|
2295
|
+
* Patterns that are not ancestor-anchored pass through untouched.
|
|
2296
|
+
*
|
|
2297
|
+
* @param configs - The configs to rewrite.
|
|
2298
|
+
* @param relativeConfigDirectory - The config's directory relative to the workspace
|
|
2299
|
+
* root, or `undefined` when it is the workspace root or outside it.
|
|
2300
|
+
* @returns The configs, with anchored globs widened.
|
|
2301
|
+
*/
|
|
2302
|
+
function rebaseAnchoredFiles(configs, relativeConfigDirectory) {
|
|
2303
|
+
if (relativeConfigDirectory === void 0) return configs;
|
|
2304
|
+
return configs.map((config) => {
|
|
2305
|
+
const rebased = config.files.flatMap((pattern) => {
|
|
2306
|
+
return rebaseAncestorAnchor(pattern, relativeConfigDirectory);
|
|
2307
|
+
});
|
|
2308
|
+
return {
|
|
2309
|
+
...config,
|
|
2310
|
+
files: [...new Set(rebased)]
|
|
2311
|
+
};
|
|
2312
|
+
});
|
|
2154
2313
|
}
|
|
2155
2314
|
//#endregion
|
|
2156
2315
|
//#region src/rules/e18e.ts
|
|
@@ -3680,7 +3839,7 @@ function oxlintStylistic(options = {}) {
|
|
|
3680
3839
|
//#endregion
|
|
3681
3840
|
//#region src/rules/test.ts
|
|
3682
3841
|
/**
|
|
3683
|
-
* Rules that make no sense in a type test (`*.
|
|
3842
|
+
* Rules that make no sense in a type test (`*.spec-d.ts`): these files assert
|
|
3684
3843
|
* with `expectTypeOf`/`assertType` at compile time, run no expectations, and
|
|
3685
3844
|
* name their blocks after the types under test.
|
|
3686
3845
|
*
|
|
@@ -3689,6 +3848,13 @@ function oxlintStylistic(options = {}) {
|
|
|
3689
3848
|
*/
|
|
3690
3849
|
function typeTestRules(prefix) {
|
|
3691
3850
|
return {
|
|
3851
|
+
...prefix === "vitest" ? {
|
|
3852
|
+
"flawless/prefer-ending-with-an-expect": "off",
|
|
3853
|
+
"vitest/consistent-test-filename": ["error", {
|
|
3854
|
+
allTestPattern: ".*\\.(test|spec)-d\\.[tj]sx?$",
|
|
3855
|
+
pattern: ".*\\.spec-d\\.[tj]sx?$"
|
|
3856
|
+
}]
|
|
3857
|
+
} : {},
|
|
3692
3858
|
[`${prefix}/expect-expect`]: "off",
|
|
3693
3859
|
[`${prefix}/prefer-expect-assertions`]: "off",
|
|
3694
3860
|
[`${prefix}/prefer-lowercase-title`]: "off"
|
|
@@ -3721,6 +3887,7 @@ function jestExtendedRules() {
|
|
|
3721
3887
|
*/
|
|
3722
3888
|
function jestRules({ extended = false, isInEditor = false, roblox: isRoblox = true, stylistic = true } = {}) {
|
|
3723
3889
|
return {
|
|
3890
|
+
"flawless/prefer-expect-assertions-count": "error",
|
|
3724
3891
|
"jest/consistent-test-it": "error",
|
|
3725
3892
|
"jest/expect-expect": "warn",
|
|
3726
3893
|
"jest/max-expects": "error",
|
|
@@ -3772,7 +3939,7 @@ function jestRules({ extended = false, isInEditor = false, roblox: isRoblox = tr
|
|
|
3772
3939
|
"jest/valid-describe-callback": "error",
|
|
3773
3940
|
"jest/valid-expect": isRoblox ? "off" : "error",
|
|
3774
3941
|
"jest/valid-expect-in-promise": "error",
|
|
3775
|
-
"jest/valid-expect-with-promise": "error",
|
|
3942
|
+
"jest/valid-expect-with-promise": ["error", { checkThenables: true }],
|
|
3776
3943
|
"jest/valid-title": ["error", {
|
|
3777
3944
|
ignoreTypeOfDescribeName: true,
|
|
3778
3945
|
mustMatch: { it: ["^should", "Test title must start with \"should\""] }
|
|
@@ -3797,6 +3964,13 @@ function jestRules({ extended = false, isInEditor = false, roblox: isRoblox = tr
|
|
|
3797
3964
|
*/
|
|
3798
3965
|
function vitestRules({ extended = false, isInEditor = false, stylistic = true } = {}) {
|
|
3799
3966
|
return {
|
|
3967
|
+
"flawless/no-conditional-in-test": ["error", { allowOptionalChaining: false }],
|
|
3968
|
+
"flawless/prefer-ending-with-an-expect": ["warn", { assertFunctionNames: [
|
|
3969
|
+
"expect",
|
|
3970
|
+
"expectTypeOf",
|
|
3971
|
+
"assertType"
|
|
3972
|
+
] }],
|
|
3973
|
+
"flawless/prefer-expect-assertions-count": "warn",
|
|
3800
3974
|
"vitest/consistent-each-for": ["error", {
|
|
3801
3975
|
describe: "for",
|
|
3802
3976
|
it: "for",
|
|
@@ -3816,7 +3990,6 @@ function vitestRules({ extended = false, isInEditor = false, stylistic = true }
|
|
|
3816
3990
|
"vitest/no-alias-methods": "error",
|
|
3817
3991
|
"vitest/no-commented-out-tests": "warn",
|
|
3818
3992
|
"vitest/no-conditional-expect": "error",
|
|
3819
|
-
"vitest/no-conditional-in-test": "error",
|
|
3820
3993
|
"vitest/no-conditional-tests": "error",
|
|
3821
3994
|
"vitest/no-disabled-tests": isInEditor ? "off" : "error",
|
|
3822
3995
|
"vitest/no-duplicate-hooks": "error",
|
|
@@ -4609,7 +4782,11 @@ function isentinel(factoryOptions, ...userConfigs) {
|
|
|
4609
4782
|
}), oxlintFlawless({ stylistic: stylisticOptions }, prettierSettings), oxlintComments({
|
|
4610
4783
|
prettierOptions: prettierSettings,
|
|
4611
4784
|
stylistic: stylisticOptions
|
|
4612
|
-
}), oxlintDisables({
|
|
4785
|
+
}), oxlintDisables({
|
|
4786
|
+
configDirectory: options.configDirectory,
|
|
4787
|
+
root: rootGlobs,
|
|
4788
|
+
workspaceRoot: findWorkspaceRootSync()
|
|
4789
|
+
}));
|
|
4613
4790
|
if (stylisticOptions !== false && formatters !== false) {
|
|
4614
4791
|
const oxfmtConfigOptions = resolveOxfmtConfigOptionsSync();
|
|
4615
4792
|
configs.push(oxlintOxfmt({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@isentinel/eslint-config",
|
|
3
|
-
"version": "6.0.0-beta.
|
|
3
|
+
"version": "6.0.0-beta.23",
|
|
4
4
|
"description": "iSentinel's ESLint config",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint-config",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"dist"
|
|
54
54
|
],
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@antfu/install-pkg": "
|
|
56
|
+
"@antfu/install-pkg": "2.0.1",
|
|
57
57
|
"@clack/prompts": "1.7.0",
|
|
58
58
|
"@cspell/eslint-plugin": "10.0.1",
|
|
59
59
|
"@e18e/eslint-plugin": "0.5.1",
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
"@oxlint/plugins": "1.74.0",
|
|
65
65
|
"@pobammer-ts/small-rules": "2.7.0",
|
|
66
66
|
"@stylistic/eslint-plugin": "5.10.0",
|
|
67
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
68
|
-
"@typescript-eslint/parser": "8.
|
|
67
|
+
"@typescript-eslint/eslint-plugin": "8.65.0",
|
|
68
|
+
"@typescript-eslint/parser": "8.65.0",
|
|
69
69
|
"ansis": "4.3.1",
|
|
70
70
|
"concurrently": "10.0.3",
|
|
71
71
|
"eslint-config-flat-gitignore": "2.3.0",
|
|
@@ -76,15 +76,15 @@
|
|
|
76
76
|
"eslint-plugin-better-max-params": "1.0.0",
|
|
77
77
|
"eslint-plugin-comment-length": "2.3.1",
|
|
78
78
|
"eslint-plugin-de-morgan": "2.1.3",
|
|
79
|
-
"eslint-plugin-flawless": "1.
|
|
79
|
+
"eslint-plugin-flawless": "1.4.1",
|
|
80
80
|
"eslint-plugin-format-lua": "2.0.0",
|
|
81
81
|
"eslint-plugin-import-lite": "0.6.0",
|
|
82
|
-
"eslint-plugin-jsdoc": "63.
|
|
82
|
+
"eslint-plugin-jsdoc": "63.2.0",
|
|
83
83
|
"eslint-plugin-jsonc": "3.3.0",
|
|
84
84
|
"eslint-plugin-oxfmt": "0.14.0",
|
|
85
85
|
"eslint-plugin-package-json": "1.6.0",
|
|
86
86
|
"eslint-plugin-perfectionist": "5.10.0",
|
|
87
|
-
"eslint-plugin-pnpm": "1.
|
|
87
|
+
"eslint-plugin-pnpm": "1.7.0",
|
|
88
88
|
"eslint-plugin-promise": "7.3.0",
|
|
89
89
|
"eslint-plugin-roblox-ts": "1.4.1",
|
|
90
90
|
"eslint-plugin-sentinel": "0.1.2",
|
|
@@ -101,15 +101,16 @@
|
|
|
101
101
|
"oxfmt": "0.59.0",
|
|
102
102
|
"oxlint-plugin-eslint": "1.74.0",
|
|
103
103
|
"oxlint-plugin-oxlint-comments": "0.1.0",
|
|
104
|
-
"prettier": "3.9.
|
|
104
|
+
"prettier": "3.9.6",
|
|
105
105
|
"semver": "7.8.5",
|
|
106
106
|
"toml-eslint-parser": "1.0.3",
|
|
107
|
+
"type-fest": "5.8.0",
|
|
107
108
|
"yaml-eslint-parser": "2.1.0",
|
|
108
109
|
"yargs": "18.0.0"
|
|
109
110
|
},
|
|
110
111
|
"devDependencies": {
|
|
111
112
|
"@antfu/ni": "30.2.0",
|
|
112
|
-
"@eslint-react/shared": "5.17.
|
|
113
|
+
"@eslint-react/shared": "5.17.3",
|
|
113
114
|
"@eslint/config-inspector": "3.1.0",
|
|
114
115
|
"@isentinel/tsconfig": "1.2.0",
|
|
115
116
|
"@stylistic/eslint-plugin-migrate": "4.4.1",
|
|
@@ -119,30 +120,29 @@
|
|
|
119
120
|
"@types/semver": "7.7.1",
|
|
120
121
|
"@types/yargs": "17.0.35",
|
|
121
122
|
"@vitest/eslint-plugin": "1.6.23",
|
|
122
|
-
"bumpp": "
|
|
123
|
+
"bumpp": "12.0.0",
|
|
123
124
|
"eslint": "10.7.0",
|
|
124
125
|
"eslint-plugin-erasable-syntax-only": "0.4.2",
|
|
125
126
|
"eslint-plugin-eslint-plugin": "7.5.0",
|
|
126
|
-
"eslint-plugin-jest": "29.
|
|
127
|
+
"eslint-plugin-jest": "29.16.0",
|
|
127
128
|
"eslint-plugin-jest-extended": "3.0.1",
|
|
128
129
|
"eslint-plugin-n": "18.2.2",
|
|
129
|
-
"eslint-plugin-react-jsx": "5.17.
|
|
130
|
-
"eslint-plugin-react-naming-convention": "5.17.
|
|
131
|
-
"eslint-plugin-react-x": "5.17.
|
|
130
|
+
"eslint-plugin-react-jsx": "5.17.3",
|
|
131
|
+
"eslint-plugin-react-naming-convention": "5.17.3",
|
|
132
|
+
"eslint-plugin-react-x": "5.17.3",
|
|
132
133
|
"eslint-typegen": "2.3.1",
|
|
133
134
|
"jiti": "2.7.0",
|
|
134
135
|
"oxlint": "1.74.0",
|
|
135
136
|
"oxlint-tsgolint": "0.25.0",
|
|
136
137
|
"parse-gitignore-ts": "1.0.0",
|
|
137
138
|
"picomatch": "4.0.5",
|
|
138
|
-
"pnpm-workspace-yaml": "1.
|
|
139
|
+
"pnpm-workspace-yaml": "1.7.0",
|
|
139
140
|
"publint": "0.3.21",
|
|
140
|
-
"tsdown": "0.22.
|
|
141
|
-
"type-fest": "5.8.0",
|
|
141
|
+
"tsdown": "0.22.12",
|
|
142
142
|
"typescript": "6.0.3",
|
|
143
143
|
"unplugin-unused": "0.5.7",
|
|
144
144
|
"vitest": "4.1.10",
|
|
145
|
-
"@isentinel/eslint-config": "6.0.0-beta.
|
|
145
|
+
"@isentinel/eslint-config": "6.0.0-beta.23"
|
|
146
146
|
},
|
|
147
147
|
"peerDependencies": {
|
|
148
148
|
"@vitest/eslint-plugin": "^1.6.4",
|
|
@@ -198,13 +198,14 @@
|
|
|
198
198
|
"scripts": {
|
|
199
199
|
"build": "nr gen && tsdown && node scripts/check-dist.ts",
|
|
200
200
|
"build:inspector": "pnpm build && pnpm dlx @eslint/config-inspector build --config eslint-inspector.config.ts --out-dir ./.eslint-config-inspector",
|
|
201
|
+
"check:extensions": "node scripts/check-package-extensions.ts && node scripts/gen-package-extensions.ts --check",
|
|
202
|
+
"check:published": "node scripts/check-published-extensions.ts",
|
|
201
203
|
"dev": "npx @eslint/config-inspector --config eslint-inspector.config.ts",
|
|
202
|
-
"gen": "node scripts/typegen.ts && node scripts/typegen-oxlint.ts && node scripts/typegen-defaults.ts && node scripts/typegen-defaults-oxlint.ts && node scripts/versiongen.ts",
|
|
204
|
+
"gen": "node scripts/typegen.ts && node scripts/typegen-oxlint.ts && node scripts/typegen-defaults.ts && node scripts/typegen-defaults-oxlint.ts && node scripts/versiongen.ts && node scripts/gen-package-extensions.ts",
|
|
203
205
|
"postgen": "echo 'Generation complete!'",
|
|
204
|
-
"lint": "
|
|
205
|
-
"lint:ci": "concurrently 'oxlint' 'eslint --cache --cache-strategy content'",
|
|
206
|
+
"lint": "isentinel-lint",
|
|
206
207
|
"oxlint": "oxlint",
|
|
207
|
-
"release": "bumpp",
|
|
208
|
+
"release": "bumpp -r",
|
|
208
209
|
"stub": "tsdown",
|
|
209
210
|
"test": "nr gen && vitest run",
|
|
210
211
|
"test:watch": "vitest",
|