@isentinel/eslint-config 5.1.1 → 5.1.3

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.mts CHANGED
@@ -17844,7 +17844,7 @@ type Yoda = [] | [("always" | "never")] | [("always" | "never"), {
17844
17844
  exceptRange?: boolean;
17845
17845
  onlyEquality?: boolean;
17846
17846
  }]; // Names of all the configs
17847
- type ConfigNames = 'isentinel/cease-nonsense' | 'isentinel/eslint/comments' | 'isentinel/eslint/comments/src' | 'isentinel/eslint-plugin/setup' | 'isentinel/eslint-plugin/rules' | 'isentinel/flawless/setup' | 'isentinel/flawless/ts/rules-type-aware' | 'isentinel/flawless/tsx/rules-type-aware' | 'isentinel/gitignore' | 'isentinel/ignores' | 'isentinel/imports/rules' | 'isentinel/imports/game' | 'isentinel/javascript/setup' | 'isentinel/javascript/rules' | 'isentinel/jsdoc/setup' | 'isentinel/jsdoc' | 'isentinel/jsonc/setup' | 'isentinel/jsonc/rules' | 'isentinel/markdown/setup' | 'isentinel/markdown/processor' | 'isentinel/markdown/parser' | 'isentinel/markdown/disables' | 'isentinel/node/rules' | 'isentinel/oxfmt/setup' | 'isentinel/oxfmt/javascript' | 'isentinel/oxfmt/typescript' | 'isentinel/oxfmt/css' | 'isentinel/oxfmt/scss' | 'isentinel/oxfmt/less' | 'isentinel/oxfmt/html' | 'isentinel/oxfmt/markdown' | 'isentinel/oxfmt/graphql' | 'isentinel/oxfmt/json' | 'isentinel/oxfmt/yaml' | 'isentinel/package-json/setup' | 'isentinel/package-json' | 'isentinel/perfectionist/setup' | 'isentinel/perfectionist' | 'isentinel/perfectionist/jsx' | 'isentinel/pnpm/setup' | 'isentinel/pnpm/package-json' | 'isentinel/pnpm/pnpm-workspace-yaml' | 'isentinel/promise' | 'isentinel/react/setup' | 'isentinel/react/setup/naming' | 'isentinel/react/rules' | 'isentinel/react/type-aware-rules' | 'isentinel/roblox/setup' | 'isentinel/roblox/parser' | 'isentinel/roblox/type-aware-parser' | 'isentinel/roblox' | 'isentinel/roblox/rules-type-aware' | 'isentinel/roblox/format-lua/setup' | 'isentinel/roblox/format-lua' | 'isentinel/sonarjs' | 'isentinel/spelling/setup' | 'isentinel/spelling' | 'isentinel/stylistic/setup' | 'isentinel/stylistic' | 'isentinel/stylistic/ts' | 'isentinel/stylistic/js' | 'isentinel/stylistic/markdown-code' | 'isentinel/test/jest/setup' | 'isentinel/test/jest/rules' | 'isentinel/test/vitest/setup' | 'isentinel/test/vitest/rules' | 'isentinel/toml/setup' | 'isentinel/toml/rules' | 'isentinel/typescript/setup' | 'isentinel/typescript/parser' | 'isentinel/typescript/type-aware-parser' | 'isentinel/typescript/rules' | 'isentinel/typescript/rules-type-aware' | 'isentinel/typescript/erasable-syntax-only' | 'isentinel/unicorn' | 'isentinel/unicorn/root' | 'isentinel/yaml/setup' | 'isentinel/yaml/rules';
17847
+ type ConfigNames = 'isentinel/cease-nonsense' | 'isentinel/eslint/comments' | 'isentinel/eslint/comments/src' | 'isentinel/eslint-plugin/setup' | 'isentinel/eslint-plugin/rules' | 'isentinel/flawless/setup' | 'isentinel/flawless/ts/rules-type-aware' | 'isentinel/flawless/tsx/rules-type-aware' | 'isentinel/gitignore' | 'isentinel/ignores' | 'isentinel/imports/rules' | 'isentinel/imports/game' | 'isentinel/javascript/setup' | 'isentinel/javascript/rules' | 'isentinel/jsdoc/setup' | 'isentinel/jsdoc' | 'isentinel/jsonc/setup' | 'isentinel/jsonc/rules' | 'isentinel/markdown/setup' | 'isentinel/markdown/processor' | 'isentinel/markdown/parser' | 'isentinel/markdown/disables' | 'isentinel/node/rules' | 'isentinel/oxfmt/setup' | 'isentinel/oxfmt/javascript' | 'isentinel/oxfmt/typescript' | 'isentinel/oxfmt/css' | 'isentinel/oxfmt/scss' | 'isentinel/oxfmt/less' | 'isentinel/oxfmt/html' | 'isentinel/oxfmt/markdown' | 'isentinel/oxfmt/graphql' | 'isentinel/oxfmt/json' | 'isentinel/oxfmt/yaml' | 'isentinel/package-json/setup' | 'isentinel/package-json' | 'isentinel/package-json/root' | 'isentinel/perfectionist/setup' | 'isentinel/perfectionist' | 'isentinel/perfectionist/jsx' | 'isentinel/pnpm/setup' | 'isentinel/pnpm/package-json' | 'isentinel/pnpm/pnpm-workspace-yaml' | 'isentinel/promise' | 'isentinel/react/setup' | 'isentinel/react/setup/naming' | 'isentinel/react/rules' | 'isentinel/react/type-aware-rules' | 'isentinel/roblox/setup' | 'isentinel/roblox/parser' | 'isentinel/roblox/type-aware-parser' | 'isentinel/roblox' | 'isentinel/roblox/rules-type-aware' | 'isentinel/roblox/format-lua/setup' | 'isentinel/roblox/format-lua' | 'isentinel/sonarjs' | 'isentinel/spelling/setup' | 'isentinel/spelling' | 'isentinel/stylistic/setup' | 'isentinel/stylistic' | 'isentinel/stylistic/ts' | 'isentinel/stylistic/js' | 'isentinel/stylistic/markdown-code' | 'isentinel/test/jest/setup' | 'isentinel/test/jest/rules' | 'isentinel/test/vitest/setup' | 'isentinel/test/vitest/rules' | 'isentinel/toml/setup' | 'isentinel/toml/rules' | 'isentinel/typescript/setup' | 'isentinel/typescript/parser' | 'isentinel/typescript/type-aware-parser' | 'isentinel/typescript/rules' | 'isentinel/typescript/rules-type-aware' | 'isentinel/typescript/erasable-syntax-only' | 'isentinel/unicorn' | 'isentinel/unicorn/root' | 'isentinel/yaml/setup' | 'isentinel/yaml/rules';
17848
17848
  //#endregion
17849
17849
  //#region src/types.d.ts
17850
17850
  type Awaitable<T> = Promise<T> | T;
package/dist/index.mjs CHANGED
@@ -1578,143 +1578,178 @@ async function jsx() {
1578
1578
  //#region src/configs/package-json.ts
1579
1579
  async function packageJson(options = {}) {
1580
1580
  const { roblox = true, stylistic = true, type = "game" } = options;
1581
- const [jsoncEslintParser, pluginPackageJson] = await Promise.all([interopDefault(import("jsonc-eslint-parser")), interopDefault(import("eslint-plugin-package-json"))]);
1582
- return [{
1583
- name: "isentinel/package-json/setup",
1584
- plugins: { "package-json": pluginPackageJson }
1585
- }, {
1586
- name: "isentinel/package-json",
1587
- files: ["**/package.json"],
1588
- languageOptions: { parser: jsoncEslintParser },
1589
- rules: {
1590
- "package-json/no-empty-fields": "error",
1591
- "package-json/no-redundant-files": "error",
1592
- "package-json/no-redundant-publishConfig": "error",
1593
- "package-json/repository-shorthand": "error",
1594
- "package-json/require-packageManager": "error",
1595
- "package-json/require-type": "error",
1596
- "package-json/restrict-private-properties": "error",
1597
- "package-json/restrict-top-level-properties": ["error", { ban: [
1598
- {
1599
- message: "Configure pnpm options in pnpm-workspace.yaml.",
1600
- property: "pnpm"
1601
- },
1602
- {
1603
- message: "Configure prettier options in eslint config",
1604
- property: "prettier"
1605
- },
1606
- {
1607
- message: "Configure commitlint in a dedicated config file.",
1608
- property: "commitlint"
1609
- },
1610
- {
1611
- message: "Configure ESLint in a dedicated config file.",
1612
- property: "eslintConfig"
1613
- },
1614
- {
1615
- message: "Configure Jest in a dedicated config file.",
1616
- property: "jest"
1617
- },
1618
- {
1619
- message: "Configure lint-staged in a dedicated config file.",
1620
- property: "lint-staged"
1621
- },
1622
- {
1623
- message: "Configure Renovate in a renovate config file.",
1624
- property: "renovate"
1625
- },
1626
- {
1627
- message: "Configure nx in the nx.json file.",
1628
- property: "nx"
1629
- },
1630
- {
1631
- message: "Configure simple-git-hooks in simple-git-hooks config file.",
1632
- property: "simple-git-hooks"
1633
- },
1634
- {
1635
- message: "Configure release-it in a dedicated config file.",
1636
- property: "release-it"
1637
- },
1638
- {
1639
- message: "Configure Stylelint in a dedicated config file.",
1640
- property: "stylelint"
1641
- },
1642
- {
1643
- message: "Configure TypeDoc in a dedicated config file.",
1644
- property: "typedoc"
1645
- }
1646
- ] }],
1647
- "package-json/specify-peers-locally": "error",
1648
- "package-json/unique-dependencies": "error",
1649
- "package-json/valid-author": "off",
1650
- "package-json/valid-bin": "error",
1651
- "package-json/valid-browser": "error",
1652
- "package-json/valid-bugs": "error",
1653
- "package-json/valid-bundleDependencies": "error",
1654
- "package-json/valid-config": "error",
1655
- "package-json/valid-contributors": "error",
1656
- "package-json/valid-cpu": "error",
1657
- "package-json/valid-dependencies": "error",
1658
- "package-json/valid-description": "error",
1659
- "package-json/valid-devDependencies": "error",
1660
- "package-json/valid-devEngines": "error",
1661
- "package-json/valid-directories": "error",
1662
- "package-json/valid-engines": "error",
1663
- "package-json/valid-exports": "error",
1664
- "package-json/valid-files": "error",
1665
- "package-json/valid-funding": "error",
1666
- "package-json/valid-gypfile": "error",
1667
- "package-json/valid-homepage": "error",
1668
- "package-json/valid-keywords": "error",
1669
- "package-json/valid-libc": "error",
1670
- "package-json/valid-license": "error",
1671
- "package-json/valid-main": "error",
1672
- "package-json/valid-man": "error",
1673
- "package-json/valid-module": "error",
1674
- "package-json/valid-name": "error",
1675
- "package-json/valid-optionalDependencies": "error",
1676
- "package-json/valid-os": "error",
1677
- "package-json/valid-packageManager": "error",
1678
- "package-json/valid-peerDependencies": "error",
1679
- "package-json/valid-peerDependenciesMeta": "error",
1680
- "package-json/valid-peerDependenciesMeta-relationship": "error",
1681
- "package-json/valid-private": "error",
1682
- "package-json/valid-publishConfig": "error",
1683
- "package-json/valid-repository": "error",
1684
- "package-json/valid-repository-directory": "error",
1685
- "package-json/valid-scripts": "error",
1686
- "package-json/valid-sideEffects": "error",
1687
- "package-json/valid-type": "error",
1688
- "package-json/valid-version": "error",
1689
- "package-json/valid-workspaces": "error",
1690
- ...stylistic !== false ? {
1691
- "package-json/bin-name-casing": "error",
1692
- "package-json/exports-subpaths-style": ["error", { prefer: "explicit" }],
1693
- "package-json/order-properties": "error",
1694
- "package-json/scripts-name-casing": "error",
1695
- "package-json/sort-collections": "error"
1696
- } : {},
1697
- ...type === "package" ? {
1698
- "package-json/require-attribution": ["error", { ignorePrivate: true }],
1699
- "package-json/require-bugs": ["error", { ignorePrivate: true }],
1700
- "package-json/require-description": "error",
1701
- "package-json/require-exports": ["error", { ignorePrivate: true }],
1702
- "package-json/require-files": ["error", { ignorePrivate: true }],
1703
- "package-json/require-homepage": ["error", { ignorePrivate: true }],
1704
- "package-json/require-keywords": ["error", { ignorePrivate: true }],
1705
- "package-json/require-license": ["error", { ignorePrivate: true }],
1706
- "package-json/require-name": "error",
1707
- "package-json/require-repository": ["error", { ignorePrivate: true }],
1708
- "package-json/require-types": ["error", { ignorePrivate: true }],
1709
- "package-json/require-version": "error"
1710
- } : {},
1711
- ...type === "package" && !roblox ? {
1712
- "package-json/require-bin": ["error", { ignorePrivate: true }],
1713
- "package-json/require-engines": "error",
1714
- "package-json/require-sideEffects": ["error", { ignorePrivate: true }]
1715
- } : {}
1716
- }
1717
- }];
1581
+ const [jsoncEslintParser, pluginPackageJson, atRoot] = await Promise.all([
1582
+ interopDefault(import("jsonc-eslint-parser")),
1583
+ interopDefault(import("eslint-plugin-package-json")),
1584
+ isWorkspaceRootCwd()
1585
+ ]);
1586
+ return [
1587
+ {
1588
+ name: "isentinel/package-json/setup",
1589
+ plugins: { "package-json": pluginPackageJson }
1590
+ },
1591
+ {
1592
+ name: "isentinel/package-json",
1593
+ files: ["**/package.json"],
1594
+ languageOptions: { parser: jsoncEslintParser },
1595
+ rules: {
1596
+ "package-json/no-empty-fields": "error",
1597
+ "package-json/no-redundant-files": "error",
1598
+ "package-json/no-redundant-publishConfig": "error",
1599
+ "package-json/repository-shorthand": "error",
1600
+ "package-json/require-packageManager": ["error", { ignorePrivate: true }],
1601
+ "package-json/require-type": "error",
1602
+ "package-json/restrict-private-properties": "error",
1603
+ "package-json/restrict-top-level-properties": ["error", { ban: [
1604
+ {
1605
+ message: "Configure pnpm options in pnpm-workspace.yaml.",
1606
+ property: "pnpm"
1607
+ },
1608
+ {
1609
+ message: "Configure prettier options in eslint config",
1610
+ property: "prettier"
1611
+ },
1612
+ {
1613
+ message: "Configure commitlint in a dedicated config file.",
1614
+ property: "commitlint"
1615
+ },
1616
+ {
1617
+ message: "Configure ESLint in a dedicated config file.",
1618
+ property: "eslintConfig"
1619
+ },
1620
+ {
1621
+ message: "Configure Jest in a dedicated config file.",
1622
+ property: "jest"
1623
+ },
1624
+ {
1625
+ message: "Configure lint-staged in a dedicated config file.",
1626
+ property: "lint-staged"
1627
+ },
1628
+ {
1629
+ message: "Configure Renovate in a renovate config file.",
1630
+ property: "renovate"
1631
+ },
1632
+ {
1633
+ message: "Configure nx in the nx.json file.",
1634
+ property: "nx"
1635
+ },
1636
+ {
1637
+ message: "Configure simple-git-hooks in simple-git-hooks config file.",
1638
+ property: "simple-git-hooks"
1639
+ },
1640
+ {
1641
+ message: "Configure release-it in a dedicated config file.",
1642
+ property: "release-it"
1643
+ },
1644
+ {
1645
+ message: "Configure Stylelint in a dedicated config file.",
1646
+ property: "stylelint"
1647
+ },
1648
+ {
1649
+ message: "Configure TypeDoc in a dedicated config file.",
1650
+ property: "typedoc"
1651
+ }
1652
+ ] }],
1653
+ "package-json/specify-peers-locally": "error",
1654
+ "package-json/unique-dependencies": "error",
1655
+ "package-json/valid-author": "off",
1656
+ "package-json/valid-bin": "error",
1657
+ "package-json/valid-browser": "error",
1658
+ "package-json/valid-bugs": "error",
1659
+ "package-json/valid-bundleDependencies": "error",
1660
+ "package-json/valid-config": "error",
1661
+ "package-json/valid-contributors": "error",
1662
+ "package-json/valid-cpu": "error",
1663
+ "package-json/valid-dependencies": "error",
1664
+ "package-json/valid-description": "error",
1665
+ "package-json/valid-devDependencies": "error",
1666
+ "package-json/valid-devEngines": "error",
1667
+ "package-json/valid-directories": "error",
1668
+ "package-json/valid-engines": "error",
1669
+ "package-json/valid-exports": "error",
1670
+ "package-json/valid-files": "error",
1671
+ "package-json/valid-funding": "error",
1672
+ "package-json/valid-gypfile": "error",
1673
+ "package-json/valid-homepage": "error",
1674
+ "package-json/valid-keywords": "error",
1675
+ "package-json/valid-libc": "error",
1676
+ "package-json/valid-license": "error",
1677
+ "package-json/valid-main": "error",
1678
+ "package-json/valid-man": "error",
1679
+ "package-json/valid-module": "error",
1680
+ "package-json/valid-name": "error",
1681
+ "package-json/valid-optionalDependencies": "error",
1682
+ "package-json/valid-os": "error",
1683
+ "package-json/valid-packageManager": "error",
1684
+ "package-json/valid-peerDependencies": "error",
1685
+ "package-json/valid-peerDependenciesMeta": "error",
1686
+ "package-json/valid-peerDependenciesMeta-relationship": "error",
1687
+ "package-json/valid-private": "error",
1688
+ "package-json/valid-publishConfig": "error",
1689
+ "package-json/valid-repository": "error",
1690
+ "package-json/valid-repository-directory": "error",
1691
+ "package-json/valid-scripts": "error",
1692
+ "package-json/valid-sideEffects": "error",
1693
+ "package-json/valid-type": "error",
1694
+ "package-json/valid-version": "error",
1695
+ "package-json/valid-workspaces": "error",
1696
+ ...stylistic !== false ? {
1697
+ "package-json/bin-name-casing": "error",
1698
+ "package-json/exports-subpaths-style": ["error", { prefer: "explicit" }],
1699
+ "package-json/order-properties": "error",
1700
+ "package-json/scripts-name-casing": "error",
1701
+ "package-json/sort-collections": "error"
1702
+ } : {},
1703
+ ...type === "package" ? {
1704
+ "package-json/require-attribution": ["error", { ignorePrivate: true }],
1705
+ "package-json/require-bugs": ["error", { ignorePrivate: true }],
1706
+ "package-json/require-description": "error",
1707
+ "package-json/require-exports": ["error", { ignorePrivate: true }],
1708
+ "package-json/require-files": ["error", { ignorePrivate: true }],
1709
+ "package-json/require-homepage": ["error", { ignorePrivate: true }],
1710
+ "package-json/require-keywords": ["error", { ignorePrivate: true }],
1711
+ "package-json/require-license": ["error", { ignorePrivate: true }],
1712
+ "package-json/require-name": "error",
1713
+ "package-json/require-repository": ["error", { ignorePrivate: true }],
1714
+ "package-json/require-types": ["error", { ignorePrivate: true }],
1715
+ "package-json/require-version": "error"
1716
+ } : {},
1717
+ ...type === "package" && !roblox ? {
1718
+ "package-json/require-bin": ["error", { ignorePrivate: true }],
1719
+ "package-json/require-engines": "error",
1720
+ "package-json/require-sideEffects": ["error", { ignorePrivate: true }]
1721
+ } : {}
1722
+ }
1723
+ },
1724
+ ...atRoot ? [{
1725
+ name: "isentinel/package-json/root",
1726
+ files: ["package.json"],
1727
+ languageOptions: { parser: jsoncEslintParser },
1728
+ rules: { "package-json/require-packageManager": ["error", { ignorePrivate: false }] }
1729
+ }] : []
1730
+ ];
1731
+ }
1732
+ /**
1733
+ * Determines whether the current working directory is the root of the project.
1734
+ *
1735
+ * ESLint `files` globs are resolved relative to the cwd, so `["package.json"]`
1736
+ * matches the cwd's own `package.json` regardless of where it sits in a
1737
+ * monorepo. When packages are linted in parallel (each with its own cwd),
1738
+ * every package would otherwise look like the root. Detect the real root via
1739
+ * `pnpm-workspace.yaml`:
1740
+ *
1741
+ * - Found in the cwd: this is the workspace root.
1742
+ * - Found in an ancestor: this is a sub-package, not the root.
1743
+ * - Not found anywhere: a standalone project, so the cwd is its root.
1744
+ *
1745
+ * @param cwd - The directory to resolve from, defaulting to the current
1746
+ * working directory.
1747
+ * @returns Whether the cwd is the project root.
1748
+ */
1749
+ async function isWorkspaceRootCwd(cwd = process.cwd()) {
1750
+ const workspaceFile = await findUp("pnpm-workspace.yaml", { cwd });
1751
+ if (workspaceFile === void 0) return true;
1752
+ return path.relative(path.dirname(workspaceFile), cwd) === "";
1718
1753
  }
1719
1754
 
1720
1755
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isentinel/eslint-config",
3
- "version": "5.1.1",
3
+ "version": "5.1.3",
4
4
  "description": "iSentinel's ESLint config",
5
5
  "keywords": [
6
6
  "eslint-config",
@@ -122,7 +122,7 @@
122
122
  "type-fest": "5.4.4",
123
123
  "typescript": "5.9.3",
124
124
  "unplugin-unused": "0.5.7",
125
- "@isentinel/eslint-config": "5.1.1"
125
+ "@isentinel/eslint-config": "5.1.3"
126
126
  },
127
127
  "peerDependencies": {
128
128
  "@vitest/eslint-plugin": "^1.6.4",