@isentinel/eslint-config 6.0.0-beta.15 → 6.0.0-beta.16

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
@@ -38,6 +38,16 @@ import isentinel from "@isentinel/eslint-config";
38
38
  export default isentinel();
39
39
  ```
40
40
 
41
+ `@isentinel/eslint-config/eslint` is an explicit alias of the root export, for
42
+ symmetry with `@isentinel/eslint-config/oxlint`:
43
+
44
+ ```ts
45
+ // eslint.config.ts
46
+ import { isentinel } from "@isentinel/eslint-config/eslint";
47
+
48
+ export default isentinel();
49
+ ```
50
+
41
51
  #### Optional: TypeScript Config Support
42
52
 
43
53
  If you want to use `eslint.config.ts` instead of `.js`, install `jiti` v2.0.0 or
package/dist/cli.mjs CHANGED
@@ -9,7 +9,7 @@ import path from "node:path";
9
9
  import { existsSync, readFileSync } from "fs";
10
10
  import { execSync } from "node:child_process";
11
11
  //#region package.json
12
- var version = "6.0.0-beta.15";
12
+ var version = "6.0.0-beta.16";
13
13
  var package_default = {
14
14
  name: "@isentinel/eslint-config",
15
15
  version,
@@ -38,6 +38,10 @@ var package_default = {
38
38
  exports: {
39
39
  ".": "./dist/index.mjs",
40
40
  "./cli": "./dist/cli.mjs",
41
+ "./eslint": {
42
+ "types": "./dist/index.d.mts",
43
+ "default": "./dist/index.mjs"
44
+ },
41
45
  "./formatter-agents": "./dist/formatter-agents.mjs",
42
46
  "./oxlint": {
43
47
  "types": "./dist/oxlint.d.mts",
@@ -511,9 +515,9 @@ async function updateEslintFiles(result) {
511
515
  const versionsMap = {
512
516
  "eslint": "10.7.0",
513
517
  "eslint-plugin-jest": "29.15.4",
514
- "eslint-plugin-react-jsx": "5.17.1",
515
- "eslint-plugin-react-naming-convention": "5.17.1",
516
- "eslint-plugin-react-x": "5.17.1"
518
+ "eslint-plugin-react-jsx": "5.17.2",
519
+ "eslint-plugin-react-naming-convention": "5.17.2",
520
+ "eslint-plugin-react-x": "5.17.2"
517
521
  };
518
522
  //#endregion
519
523
  //#region src/cli/stages/update-package-json.ts
package/dist/index.d.mts CHANGED
@@ -1019,6 +1019,9 @@ interface MainRuleDefaults {
1019
1019
  "jsdoc/no-undefined-types": {
1020
1020
  "*": "error";
1021
1021
  };
1022
+ "jsdoc/normalize-see-links": {
1023
+ "*": "warn";
1024
+ };
1022
1025
  "jsdoc/require-asterisk-prefix": {
1023
1026
  "*": "warn";
1024
1027
  };
@@ -3293,7 +3296,20 @@ interface MainRuleDefaults {
3293
3296
  "*": "error";
3294
3297
  };
3295
3298
  "ts/no-floating-promises": {
3296
- "*": ["error", {
3299
+ game_roblox: ["error", {
3300
+ "checkThenables": true;
3301
+ "ignoreVoid": true;
3302
+ }];
3303
+ game_std: ["error", {
3304
+ "checkThenables": false;
3305
+ "ignoreVoid": true;
3306
+ }];
3307
+ package_roblox: ["error", {
3308
+ "checkThenables": true;
3309
+ "ignoreVoid": true;
3310
+ }];
3311
+ package_std: ["error", {
3312
+ "checkThenables": false;
3297
3313
  "ignoreVoid": true;
3298
3314
  }];
3299
3315
  };
@@ -5184,7 +5200,9 @@ interface TestRuleDefaults {
5184
5200
  "*": "warn";
5185
5201
  };
5186
5202
  "jest/prefer-ending-with-an-expect": {
5187
- "*": "warn";
5203
+ "*": ["warn", {
5204
+ "assertFunctionNames": ["expect", "expectTypeOf", "assertType"];
5205
+ }];
5188
5206
  };
5189
5207
  "jest/prefer-equality-matcher": {
5190
5208
  "*": "warn";
@@ -7683,6 +7701,11 @@ interface RuleOptions {
7683
7701
  * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header
7684
7702
  */
7685
7703
  'jsdoc/no-undefined-types'?: Linter.RuleEntry<JsdocNoUndefinedTypes>;
7704
+ /**
7705
+ * Normalizes labeled links in `@see` tags to a canonical `{@link}` form.
7706
+ * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/normalize-see-links.md#repos-sticky-header
7707
+ */
7708
+ 'jsdoc/normalize-see-links'?: Linter.RuleEntry<JsdocNormalizeSeeLinks>;
7686
7709
  /**
7687
7710
  * Prefer `@import` tags to inline `import()` statements.
7688
7711
  * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/prefer-import-tag.md#repos-sticky-header
@@ -17455,6 +17478,11 @@ type JsdocNoUndefinedTypes = [] | [{
17455
17478
  disableReporting?: boolean;
17456
17479
  markVariablesAsUsed?: boolean;
17457
17480
  }];
17481
+ // ----- jsdoc/normalize-see-links -----
17482
+ type JsdocNormalizeSeeLinks = [] | [{
17483
+ canonicalForm?: ("pipe" | "prefix");
17484
+ enableFixer?: boolean;
17485
+ }];
17458
17486
  // ----- jsdoc/prefer-import-tag -----
17459
17487
  type JsdocPreferImportTag = [] | [{
17460
17488
  enableFixer?: boolean;
@@ -26418,7 +26446,7 @@ type TypedFlatConfigItem = Omit<Linter.Config<Linter.RulesRecord & Rules>, "plug
26418
26446
  * object are resolved against. Defaults to the location ESLint derives the
26419
26447
  * config from. Added in ESLint 9.30.
26420
26448
  *
26421
- * @see [basePath](https://eslint.org/docs/latest/use/configure/configuration-files#specifying-basepath)
26449
+ * @see {@link https://eslint.org/docs/latest/use/configure/configuration-files#specifying-basepath|basePath}
26422
26450
  */
26423
26451
  basePath?: string;
26424
26452
  /**
@@ -26426,7 +26454,7 @@ type TypedFlatConfigItem = Omit<Linter.Config<Linter.RulesRecord & Rules>, "plug
26426
26454
  * objects. When `files` is specified, these plugins are only available to
26427
26455
  * the matching files.
26428
26456
  *
26429
- * @see [Using plugins in your configuration](https://eslint.org/docs/latest/user-guide/configuring/configuration-files-new#using-plugins-in-your-configuration)
26457
+ * @see {@link https://eslint.org/docs/latest/user-guide/configuring/configuration-files-new#using-plugins-in-your-configuration|Using plugins in your configuration}
26430
26458
  */
26431
26459
  plugins?: Record<string, any>;
26432
26460
  /**
@@ -27231,6 +27259,7 @@ declare const GLOB_JSX = "**/*.{,c,m}jsx";
27231
27259
  declare const GLOB_TS = "**/*.{,c,m}ts";
27232
27260
  declare const GLOB_TSX = "**/*.{,c,m}tsx";
27233
27261
  declare const GLOB_DTS = "**/*.d.{,c,m}ts";
27262
+ declare const GLOB_BIN: Array<string>;
27234
27263
  declare const GLOB_STYLE = "**/*.{c,le,sc}ss";
27235
27264
  declare const GLOB_CSS = "**/*.css";
27236
27265
  declare const GLOB_POSTCSS = "**/*.{p,post}css";
@@ -27434,7 +27463,14 @@ declare function test({ files, isInEditor, jest, overrides, roblox: isRoblox, st
27434
27463
  declare function toml({ files, overrides, stylistic }?: OptionsFiles & OptionsOverrides & OptionsStylistic): Promise<Array<TypedFlatConfigItem>>;
27435
27464
  //#endregion
27436
27465
  //#region src/eslint/configs/typescript.d.ts
27437
- declare function typescript(options?: OptionsComponentExtensions & OptionsFiles & OptionsOverridesTypeAware & OptionsStylistic & OptionsTypeScriptErasableOnly & OptionsTypeScriptParserOptions & OptionsTypeScriptWithTypes): Promise<Array<TypedFlatConfigItem>>;
27466
+ declare function typescript(options?: OptionsComponentExtensions & OptionsFiles & OptionsHasRoblox & OptionsOverridesTypeAware & OptionsStylistic & OptionsTypeScriptErasableOnly & OptionsTypeScriptParserOptions & OptionsTypeScriptWithTypes & {
27467
+ /**
27468
+ * When set, re-apply the non-roblox type-aware rules to every
27469
+ * type-aware file except these globs (the roblox scope), so the
27470
+ * complement is linted as standard-TS/Node land.
27471
+ */
27472
+ complementIgnores?: Array<string>;
27473
+ }): Promise<Array<TypedFlatConfigItem>>;
27438
27474
  //#endregion
27439
27475
  //#region src/eslint/configs/unicorn.d.ts
27440
27476
  declare function unicorn({ complementIgnores, nameReplacements, roblox, root: customRootGlobs, stylistic }?: OptionsHasRoblox & OptionsStylistic & OptionsUnicorn & {
@@ -27450,4 +27486,4 @@ declare function unicorn({ complementIgnores, nameReplacements, roblox, root: cu
27450
27486
  //#region src/eslint/configs/yaml.d.ts
27451
27487
  declare function yaml({ files, overrides, stylistic }?: OptionsFiles & OptionsOverrides & OptionsStylistic): Promise<Array<TypedFlatConfigItem>>;
27452
27488
  //#endregion
27453
- export { Awaitable, type ConfigNames, type FlatConfigComposer, GLOB_ALL_JSON, GLOB_ALL_SRC, GLOB_BUILD_TOOLS, GLOB_CSS, GLOB_DTS, GLOB_EXCLUDE, GLOB_GRAPHQL, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LINTABLE_EXTENSIONS, GLOB_LUA, GLOB_MARKDOWN, GLOB_MARKDOWN_BLOCKS, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_MISE, GLOB_PACKAGE_JSON, GLOB_PACKAGE_JSON_ROOT, GLOB_POSTCSS, GLOB_ROOT, GLOB_ROOT_SRC, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_SRC_EXTENSIONS, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSCONFIG, GLOB_TSX, GLOB_TYPE_TESTS, GLOB_XML, GLOB_YAML, GitignoreOptions, JsdocOptions, NamedFlatConfigItem, NamedOptionsConfig, NamingConfig, NamingSelector, OptionsComponentExtensions, OptionsConfig, OptionsE18e, OptionsFiles, OptionsFilesTypeAware, OptionsFormatters, OptionsHasRoblox, OptionsHasTypeScript, OptionsIsInEditor, OptionsJest, OptionsOverrides, OptionsOverridesTypeAware, OptionsPnpm, OptionsProjectType, OptionsStylistic, OptionsTestFramework, OptionsTypeScriptErasableOnly, OptionsTypeScriptParserOptions, OptionsTypeScriptWithTypes, OptionsTypescript, OptionsUnicorn, OptionsVitest, type OxfmtOptions, PerfectionistConfig, type PrettierOptions, ReactConfig, Rules, SpellCheckConfig, StylisticConfig, StylisticConfigDefaults, TypedFlatConfigItem, comments, isentinel as default, isentinel, defaultPluginRenaming, disables, e18e, eslintPlugin, flawless, gitignore, ignores$1 as ignores, imports, isInAgentSession, isInEditorEnvironment, isInGitHooksOrLintStaged, javascript, jsdoc, jsonc, loadSmallRulesPlugin, markdown, naming, node, oxfmt, packageJson, perfectionist, pnpm, promise, react, roblox$1 as roblox, smallRules, sonarjs, sortCspell, sortGithubAction, sortMiseToml, sortPnpmWorkspace, sortRojoProject, sortTsconfig, spelling, stylistic$1 as stylistic, test, toml, typescript, unicorn, yaml };
27489
+ export { Awaitable, type ConfigNames, type FlatConfigComposer, GLOB_ALL_JSON, GLOB_ALL_SRC, GLOB_BIN, GLOB_BUILD_TOOLS, GLOB_CSS, GLOB_DTS, GLOB_EXCLUDE, GLOB_GRAPHQL, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LINTABLE_EXTENSIONS, GLOB_LUA, GLOB_MARKDOWN, GLOB_MARKDOWN_BLOCKS, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_MISE, GLOB_PACKAGE_JSON, GLOB_PACKAGE_JSON_ROOT, GLOB_POSTCSS, GLOB_ROOT, GLOB_ROOT_SRC, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_SRC_EXTENSIONS, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSCONFIG, GLOB_TSX, GLOB_TYPE_TESTS, GLOB_XML, GLOB_YAML, GitignoreOptions, JsdocOptions, NamedFlatConfigItem, NamedOptionsConfig, NamingConfig, NamingSelector, OptionsComponentExtensions, OptionsConfig, OptionsE18e, OptionsFiles, OptionsFilesTypeAware, OptionsFormatters, OptionsHasRoblox, OptionsHasTypeScript, OptionsIsInEditor, OptionsJest, OptionsOverrides, OptionsOverridesTypeAware, OptionsPnpm, OptionsProjectType, OptionsStylistic, OptionsTestFramework, OptionsTypeScriptErasableOnly, OptionsTypeScriptParserOptions, OptionsTypeScriptWithTypes, OptionsTypescript, OptionsUnicorn, OptionsVitest, type OxfmtOptions, PerfectionistConfig, type PrettierOptions, ReactConfig, Rules, SpellCheckConfig, StylisticConfig, StylisticConfigDefaults, TypedFlatConfigItem, comments, isentinel as default, isentinel, defaultPluginRenaming, disables, e18e, eslintPlugin, flawless, gitignore, ignores$1 as ignores, imports, isInAgentSession, isInEditorEnvironment, isInGitHooksOrLintStaged, javascript, jsdoc, jsonc, loadSmallRulesPlugin, markdown, naming, node, oxfmt, packageJson, perfectionist, pnpm, promise, react, roblox$1 as roblox, smallRules, sonarjs, sortCspell, sortGithubAction, sortMiseToml, sortPnpmWorkspace, sortRojoProject, sortTsconfig, spelling, stylistic$1 as stylistic, test, toml, typescript, unicorn, yaml };
package/dist/index.mjs CHANGED
@@ -115,6 +115,7 @@ const GLOB_JSX = "**/*.{,c,m}jsx";
115
115
  const GLOB_TS = "**/*.{,c,m}ts";
116
116
  const GLOB_TSX = "**/*.{,c,m}tsx";
117
117
  const GLOB_DTS = "**/*.d.{,c,m}ts";
118
+ const GLOB_BIN = ["**/bin/**/*", `**/bin.${GLOB_SRC_EXT}`];
118
119
  const GLOB_STYLE = "**/*.{c,le,sc}ss";
119
120
  const GLOB_CSS = "**/*.css";
120
121
  const GLOB_POSTCSS = "**/*.{p,post}css";
@@ -194,6 +195,7 @@ const GLOB_EXCLUDE = [
194
195
  "**/package-lock.json",
195
196
  "**/pnpm-lock.yaml",
196
197
  "**/yarn.lock",
198
+ "**/skills-lock.json",
197
199
  "**/.cache",
198
200
  "**/.changeset",
199
201
  "**/.agents",
@@ -230,7 +232,7 @@ const GLOB_EXCLUDE = [
230
232
  "**/roblox.yml"
231
233
  ];
232
234
  //#endregion
233
- //#region src/lint-cli/state.ts
235
+ //#region src/lint-cli/lib/state.ts
234
236
  /**
235
237
  * Directory (relative to the project root) where the CLI keeps its persisted
236
238
  * state. Lives under `node_modules/.cache` so it is discarded with the
@@ -353,7 +355,7 @@ function parseState(raw) {
353
355
  return envelope.version === 2 ? envelope.data : void 0;
354
356
  }
355
357
  //#endregion
356
- //#region src/lint-cli/hybrid-status.ts
358
+ //#region src/hybrid-status.ts
357
359
  /**
358
360
  * Absolute path to the hybrid-status file for a project root.
359
361
  *
@@ -1197,7 +1199,7 @@ async function disables({ root }) {
1197
1199
  },
1198
1200
  {
1199
1201
  name: "isentinel/disables/bin",
1200
- files: ["**/bin/**/*", `**/bin.${GLOB_SRC_EXT}`],
1202
+ files: GLOB_BIN,
1201
1203
  rules: {
1202
1204
  "antfu/no-import-dist": "off",
1203
1205
  "antfu/no-import-node-modules-by-path": "off",
@@ -2091,6 +2093,7 @@ function jsdocRules({ full = false, stylistic = true, type = "game" } = {}) {
2091
2093
  "jsdoc/no-blank-block-descriptions": "warn",
2092
2094
  "jsdoc/no-blank-blocks": "warn",
2093
2095
  "jsdoc/no-multi-asterisks": "warn",
2096
+ "jsdoc/normalize-see-links": "warn",
2094
2097
  "jsdoc/require-asterisk-prefix": "warn",
2095
2098
  "jsdoc/require-hyphen-before-param-description": "warn"
2096
2099
  } : {}
@@ -4796,7 +4799,11 @@ function jestRules({ extended = false, isInEditor = false, roblox: isRoblox = tr
4796
4799
  "jest/prefer-called-with": "warn",
4797
4800
  "jest/prefer-comparison-matcher": "warn",
4798
4801
  "jest/prefer-each": "warn",
4799
- "jest/prefer-ending-with-an-expect": "warn",
4802
+ "jest/prefer-ending-with-an-expect": ["warn", { assertFunctionNames: [
4803
+ "expect",
4804
+ "expectTypeOf",
4805
+ "assertType"
4806
+ ] }],
4800
4807
  "jest/prefer-equality-matcher": "warn",
4801
4808
  "jest/prefer-expect-assertions": "error",
4802
4809
  "jest/prefer-hooks-in-order": "warn",
@@ -5143,9 +5150,10 @@ function typescriptRules({ stylistic = true } = {}) {
5143
5150
  * In hybrid mode these are executed by oxlint-tsgolint (`oxlint
5144
5151
  * --type-aware`).
5145
5152
  *
5153
+ * @param options - Shared rule options.
5146
5154
  * @returns The rule map.
5147
5155
  */
5148
- function typescriptTypeAwareRules() {
5156
+ function typescriptTypeAwareRules({ roblox = true } = {}) {
5149
5157
  return {
5150
5158
  "dot-notation": "off",
5151
5159
  "no-implied-eval": "off",
@@ -5161,7 +5169,10 @@ function typescriptTypeAwareRules() {
5161
5169
  "ts/no-deprecated": "error",
5162
5170
  "ts/no-duplicate-type-constituents": "error",
5163
5171
  "ts/no-empty-object-type": "error",
5164
- "ts/no-floating-promises": ["error", { ignoreVoid: true }],
5172
+ "ts/no-floating-promises": ["error", {
5173
+ checkThenables: roblox,
5174
+ ignoreVoid: true
5175
+ }],
5165
5176
  "ts/no-for-in-array": "error",
5166
5177
  "ts/no-implied-eval": "error",
5167
5178
  "ts/no-meaningless-void-operator": "error",
@@ -5230,7 +5241,7 @@ function erasableSyntaxOnlyRules() {
5230
5241
  //#endregion
5231
5242
  //#region src/eslint/configs/typescript.ts
5232
5243
  async function typescript(options = {}) {
5233
- const { componentExts: componentExtensions = [], erasableOnly = false, outOfProjectFiles, overrides = {}, overridesTypeAware = {}, parserOptions = {}, parserOptionsNonTypeAware = {}, parserOptionsTypeAware = {}, stylistic = true, typeAware = true } = options;
5244
+ const { complementIgnores, componentExts: componentExtensions = [], erasableOnly = false, outOfProjectFiles, overrides = {}, overridesTypeAware = {}, parserOptions = {}, parserOptionsNonTypeAware = {}, parserOptionsTypeAware = {}, roblox = true, stylistic = true, typeAware = true } = options;
5234
5245
  const files = options.files ?? [
5235
5246
  "**/*.{,c,m}ts",
5236
5247
  "**/*.{,c,m}tsx",
@@ -5240,7 +5251,7 @@ async function typescript(options = {}) {
5240
5251
  const ignoresTypeAware = options.ignoresTypeAware ?? [`**/*.md/**`];
5241
5252
  const tsconfigPath = typeAware ? getTsConfig(options.tsconfigPath) : void 0;
5242
5253
  const isTypeAware = tsconfigPath !== void 0;
5243
- const typeAwareRules = typescriptTypeAwareRules();
5254
+ const typeAwareRules = typescriptTypeAwareRules({ roblox });
5244
5255
  const [parserTs, pluginTs, pluginAntfu] = await Promise.all([
5245
5256
  interopDefault(import("@typescript-eslint/parser")),
5246
5257
  interopDefault(import("@typescript-eslint/eslint-plugin")),
@@ -5294,6 +5305,15 @@ async function typescript(options = {}) {
5294
5305
  ...overridesTypeAware
5295
5306
  }
5296
5307
  }] : [],
5308
+ ...isTypeAware && complementIgnores ? [{
5309
+ name: "isentinel/typescript/rules-type-aware/complement",
5310
+ files: filesTypeAware,
5311
+ ignores: [...ignoresTypeAware, ...complementIgnores],
5312
+ rules: {
5313
+ ...typescriptTypeAwareRules({ roblox: false }),
5314
+ ...overridesTypeAware
5315
+ }
5316
+ }] : [],
5297
5317
  ...erasableOnly ? [{
5298
5318
  name: "isentinel/typescript/erasable-syntax-only",
5299
5319
  plugins: { "erasable-syntax-only": erasablePlugin },
@@ -14986,7 +15006,6 @@ const oxlintRuleMapping = {
14986
15006
  "unicorn/no-unreadable-new-expression": "js-plugin",
14987
15007
  "unicorn/no-unsafe-property-key": "js-plugin",
14988
15008
  "unicorn/no-unused-properties": "js-plugin",
14989
- "unicorn/no-useless-coercion": "js-plugin",
14990
15009
  "unicorn/no-useless-compound-assignment": "js-plugin",
14991
15010
  "unicorn/no-useless-concat": "js-plugin",
14992
15011
  "unicorn/no-useless-delete-check": "js-plugin",
@@ -15058,6 +15077,7 @@ const oxlintRuleMapping = {
15058
15077
  "jsdoc/no-multi-asterisks": "js-plugin",
15059
15078
  "jsdoc/no-types": "js-plugin",
15060
15079
  "jsdoc/no-undefined-types": "js-plugin",
15080
+ "jsdoc/normalize-see-links": "js-plugin",
15061
15081
  "jsdoc/require-asterisk-prefix": "js-plugin",
15062
15082
  "jsdoc/require-description": "js-plugin",
15063
15083
  "jsdoc/require-description-complete-sentence": "js-plugin",
@@ -15467,7 +15487,8 @@ const optionallyTypeAwareRules = /* @__PURE__ */ new Set([
15467
15487
  "e18e/prefer-array-at",
15468
15488
  "e18e/prefer-array-to-reversed",
15469
15489
  "e18e/prefer-array-to-sorted",
15470
- "e18e/prefer-spread-syntax"
15490
+ "e18e/prefer-spread-syntax",
15491
+ "unicorn/no-useless-coercion"
15471
15492
  ]);
15472
15493
  /**
15473
15494
  * ESLint rules covered on the oxlint side by a differently-named native oxc
@@ -15874,7 +15895,9 @@ async function isentinel(options, ...userConfigs) {
15874
15895
  }), typescript({
15875
15896
  ...resolveSubOptions(options, "typescript"),
15876
15897
  ...getOverrides(options, "typescript"),
15898
+ ...needsComplementOverlay ? { complementIgnores: robloxScopedFiles } : {},
15877
15899
  componentExts: componentExtensions,
15900
+ roblox: enableRoblox,
15878
15901
  stylistic: stylisticOptions
15879
15902
  }), unicorn({
15880
15903
  ...resolveSubOptions(options, "unicorn"),
@@ -16036,4 +16059,4 @@ async function isentinel(options, ...userConfigs) {
16036
16059
  return composer;
16037
16060
  }
16038
16061
  //#endregion
16039
- export { GLOB_ALL_JSON, GLOB_ALL_SRC, GLOB_BUILD_TOOLS, GLOB_CSS, GLOB_DTS, GLOB_EXCLUDE, GLOB_GRAPHQL, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LINTABLE_EXTENSIONS, GLOB_LUA, GLOB_MARKDOWN, GLOB_MARKDOWN_BLOCKS, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_MISE, GLOB_PACKAGE_JSON, GLOB_PACKAGE_JSON_ROOT, GLOB_POSTCSS, GLOB_ROOT, GLOB_ROOT_SRC, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_SRC_EXTENSIONS, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSCONFIG, GLOB_TSX, GLOB_TYPE_TESTS, GLOB_XML, GLOB_YAML, StylisticConfigDefaults, comments, isentinel as default, isentinel, defaultPluginRenaming, disables, e18e, eslintPlugin, flawless, gitignore, ignores, imports, isInAgentSession, isInEditorEnvironment, isInGitHooksOrLintStaged, javascript, jsdoc, jsonc, loadSmallRulesPlugin, markdown, naming, node, oxfmt, packageJson, perfectionist, pnpm, promise, react, roblox, smallRules, sonarjs, sortCspell, sortGithubAction, sortMiseToml, sortPnpmWorkspace, sortRojoProject, sortTsconfig, spelling, stylistic, test, toml, typescript, unicorn, yaml };
16062
+ export { GLOB_ALL_JSON, GLOB_ALL_SRC, GLOB_BIN, GLOB_BUILD_TOOLS, GLOB_CSS, GLOB_DTS, GLOB_EXCLUDE, GLOB_GRAPHQL, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_LESS, GLOB_LINTABLE_EXTENSIONS, GLOB_LUA, GLOB_MARKDOWN, GLOB_MARKDOWN_BLOCKS, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_MISE, GLOB_PACKAGE_JSON, GLOB_PACKAGE_JSON_ROOT, GLOB_POSTCSS, GLOB_ROOT, GLOB_ROOT_SRC, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_SRC_EXTENSIONS, GLOB_STYLE, GLOB_TESTS, GLOB_TOML, GLOB_TS, GLOB_TSCONFIG, GLOB_TSX, GLOB_TYPE_TESTS, GLOB_XML, GLOB_YAML, StylisticConfigDefaults, comments, isentinel as default, isentinel, defaultPluginRenaming, disables, e18e, eslintPlugin, flawless, gitignore, ignores, imports, isInAgentSession, isInEditorEnvironment, isInGitHooksOrLintStaged, javascript, jsdoc, jsonc, loadSmallRulesPlugin, markdown, naming, node, oxfmt, packageJson, perfectionist, pnpm, promise, react, roblox, smallRules, sonarjs, sortCspell, sortGithubAction, sortMiseToml, sortPnpmWorkspace, sortRojoProject, sortTsconfig, spelling, stylistic, test, toml, typescript, unicorn, yaml };