typescript-eslint / tslint-to-eslint-config

Converts your TSLint configuration to the closest possible ESLint equivalent. πŸš€

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Could not start tslint-to-eslint - Command failed: tslint --print-config "./tslint.json" - tslint command is available and working

Routhinator opened this issue Β· comments

πŸ› Bug Report

  • tslint-to-eslint-config version: 2.14.0
  • ESLint version: 8.44.0
  • Node version: 18.16.1

Actual Behavior

tslint-to-eslint acts like the tslint command cannot be found, which is seen in other issues with an actual error with executing tslint, however in my case tslint is installed correctly and running the command manually works as expected.

There are no clues as to why there is an error at all.

routhinator@devbox:~/projects/theden/angular$ npx tslint-to-eslint-config
❌ Could not start tslint-to-eslint: ❌
  Command failed: tslint --print-config "./tslint.json"

routhinator@devbox:~/projects/theden/angular$ tslint
No files specified. Use --project to lint a project folder.
routhinator@devbox:~/projects/theden/angular$ tslint --print-config "./tslint.json"
{
  "extends": [],
  "jsRules": {
    "class-name": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "forin": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "import-spacing": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "jsdoc-format": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "label-position": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "new-parens": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-arg": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-bitwise": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-conditional-assignment": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-consecutive-blank-lines": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-console": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-construct": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-debugger": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-duplicate-super": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-duplicate-variable": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-empty": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-eval": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-reference": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-shadowed-variable": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-string-literal": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-string-throw": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-switch-case-fall-through": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "no-unused-expression": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-use-before-declare": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "one-variable-per-declaration": {
      "ruleArguments": [
        "ignore-for-loop"
      ],
      "ruleSeverity": "error"
    },
    "radix": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "triple-equals": {
      "ruleArguments": [
        "allow-null-check"
      ],
      "ruleSeverity": "error"
    },
    "use-isnan": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "variable-name": {
      "ruleArguments": [
        "allow-leading-underscore",
        "ban-keywords",
        "check-format",
        "allow-pascal-case"
      ],
      "ruleSeverity": "error"
    }
  },
  "linterOptions": {},
  "rules": {
    "adjacent-overload-signatures": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "array-type": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "ban-types": {
      "ruleArguments": [
        [
          "Object",
          "Avoid using the `Object` type. Did you mean `object`?"
        ],
        [
          "Function",
          "Avoid using the `Function` type. Prefer a specific function type, like `() => void`."
        ],
        [
          "Boolean",
          "Avoid using the `Boolean` type. Did you mean `boolean`?"
        ],
        [
          "Number",
          "Avoid using the `Number` type. Did you mean `number`?"
        ],
        [
          "String",
          "Avoid using the `String` type. Did you mean `string`?"
        ],
        [
          "Symbol",
          "Avoid using the `Symbol` type. Did you mean `symbol`?"
        ]
      ],
      "ruleSeverity": "error"
    },
    "callable-types": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "class-name": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "comment-format": {
      "ruleArguments": [
        "check-space"
      ],
      "ruleSeverity": "error"
    },
    "cyclomatic-complexity": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "forin": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "jsdoc-format": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "label-position": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "max-classes-per-file": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "new-parens": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-angle-bracket-type-assertion": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-any": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "no-arg": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-bitwise": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-conditional-assignment": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-console": {
      "ruleArguments": [
        "debug",
        "info",
        "time",
        "timeEnd",
        "trace"
      ],
      "ruleSeverity": "error"
    },
    "no-construct": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-debugger": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-duplicate-super": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-empty": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "no-empty-interface": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-eval": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-internal-module": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-invalid-this": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "no-misused-new": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-namespace": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-parameter-properties": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "no-reference": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-reference-import": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-shadowed-variable": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-string-literal": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-string-throw": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-switch-case-fall-through": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-trailing-whitespace": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-unnecessary-initializer": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-unsafe-finally": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-unused-expression": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-use-before-declare": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-var-keyword": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-var-requires": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "object-literal-shorthand": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "one-variable-per-declaration": {
      "ruleArguments": [
        "ignore-for-loop"
      ],
      "ruleSeverity": "error"
    },
    "only-arrow-functions": {
      "ruleArguments": [
        "allow-declarations",
        "allow-named-functions"
      ],
      "ruleSeverity": "error"
    },
    "prefer-const": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "prefer-for-of": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "radix": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "triple-equals": {
      "ruleArguments": [
        "allow-null-check"
      ],
      "ruleSeverity": "error"
    },
    "typedef": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "typeof-compare": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "unified-signatures": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "use-isnan": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "variable-name": {
      "ruleArguments": [
        "allow-leading-underscore",
        "ban-keywords",
        "check-format",
        "allow-pascal-case"
      ],
      "ruleSeverity": "error"
    },
    "arrow-parens": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "deprecation": {
      "ruleSeverity": "warning"
    },
    "component-class-suffix": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "contextual-lifecycle": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "directive-class-suffix": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "directive-selector": {
      "ruleArguments": [
        "attribute",
        "app",
        "camelCase"
      ],
      "ruleSeverity": "error"
    },
    "component-selector": {
      "ruleArguments": [
        "element",
        "app",
        "kebab-case"
      ],
      "ruleSeverity": "error"
    },
    "import-blacklist": {
      "ruleArguments": [
        "rxjs/Rx"
      ],
      "ruleSeverity": "error"
    },
    "interface-name": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "max-line-length": {
      "ruleArguments": [
        140
      ],
      "ruleSeverity": "error"
    },
    "member-access": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "member-ordering": {
      "ruleArguments": [
        {
          "order": [
            "static-field",
            "instance-field",
            "static-method",
            "instance-method"
          ]
        }
      ],
      "ruleSeverity": "error"
    },
    "no-consecutive-blank-lines": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "no-inferrable-types": {
      "ruleArguments": [
        "ignore-params"
      ],
      "ruleSeverity": "error"
    },
    "no-non-null-assertion": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-redundant-jsdoc": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "object-literal-key-quotes": {
      "ruleArguments": [
        "as-needed"
      ],
      "ruleSeverity": "error"
    },
    "object-literal-sort-keys": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "ordered-imports": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "quotemark": {
      "ruleArguments": [
        "single"
      ],
      "ruleSeverity": "error"
    },
    "trailing-comma": {
      "ruleArguments": [],
      "ruleSeverity": "off"
    },
    "no-conflicting-lifecycle": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-host-metadata-property": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-input-rename": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-inputs-metadata-property": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-output-native": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-output-on-prefix": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-output-rename": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "no-outputs-metadata-property": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "template-banana-in-box": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "template-no-negated-async": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "use-lifecycle-interface": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    },
    "use-pipe-transform-interface": {
      "ruleArguments": [],
      "ruleSeverity": "error"
    }
  },
  "rulesDirectory": [
    "/home/routhinator/projects/theden/angular/node_modules/codelyzer"
  ]
}
routhinator@devbox:~/projects/theden/angular$ npx tslint-to-eslint-config
❌ Could not start tslint-to-eslint: ❌
  Command failed: tslint --print-config "./tslint.json"


Expected Behavior

If it can't run the command, I would expect to have similar trouble running it manually or have some detail from the application on what the problem it's experiencing is. In this case I have nothing to go on.

Reproduction

Not really sure how to reproduce this, but here's my package.json and tslint.json

Package.json

{
  "name": "the-den-v5-frontend",
  "version": "5.0.0",
  "license": "closed",
  "scripts": {
    "start": "node prebuild.js & ng serve --open",
    "build": "node prebuild.js & ng build --configuration development",
    "build-stage": "node prebuild.js & ng build --configuration staging",
    "build-prod": "node prebuild.js & ng build --configuration production",
    "test": "ng test",
    "e2e": "ng e2e",
    "lint": "ng lint",
    "ci": "npm run lint && npm run test && npm run e2e",
    "bundle-report": "ng build --prod --stats-json",
    "dev:ssr": "node prebuild.js & ng run theden-v5-angular:serve-ssr",
    "serve:ssr": "node prebuild.js & node dist/theden-v5-angular/server/main.js",
    "prod:build:ssr": "node prebuild.js & ng build --configuration production && ng run theden-v5-angular:server:production",
    "prod:prerender": "node prebuild.js & ng run theden-v5-angular:prerender:production",
    "staging:build:ssr": "node prebuild.js & ng build --configuration staging && ng run theden-v5-angular:server:staging",
    "staging:prerender": "node prebuild.js & ng run theden-v5-angular:prerender:staging",
    "dev:build:ssr": "node prebuild.js & ng build --configuration development && ng run theden-v5-angular:server:development",
    "dev:prerender": "node prebuild.js & ng run theden-v5-angular:prerender:development"
  },
  "private": true,
  "engines": {
    "node": ">= v17.8.0",
    "npm": ">= 8.5.5"
  },
  "dependencies": {
    "@angular/animations": "15.2.9",
    "@angular/common": "15.2.9",
    "@angular/compiler": "15.2.9",
    "@angular/core": "15.2.9",
    "@angular/forms": "15.2.9",
    "@angular/localize": "15.2.9",
    "@angular/platform-browser": "15.2.9",
    "@angular/platform-browser-dynamic": "15.2.9",
    "@angular/platform-server": "15.2.9",
    "@angular/router": "15.2.9",
    "@angular/service-worker": "15.2.9",
    "@nguniversal/express-engine": "15.2.1",
    "@popperjs/core": "2.11.6",
    "ckeditor5-build-classic-with-extras": "18.1.15",
    "colors": "^1.4.0",
    "compass.js": "1.3.0",
    "config": "3.3.8",
    "express": "4.18.2",
    "express-prom-bundle": "6.5.0",
    "localstorage-polyfill": "1.0.1",
    "memory-cache": "0.2.0",
    "path": "0.12.7",
    "redis": "4.5.0",
    "rxjs": "7.5.7",
    "sitemap": "7.1.1",
    "superagent": "6.1.0",
    "tslib": "2.4.1",
    "universal-dotenv": "4.0.0",
    "zone.js": "0.11.8"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "15.2.9",
    "@angular/cdk": "15.2.9",
    "@angular/cli": "15.2.9",
    "@angular/compiler-cli": "15.2.9",
    "@angular/language-service": "15.2.9",
    "@ckeditor/ckeditor5-angular": "4.0.0",
    "@ng-bootstrap/ng-bootstrap": "14.1.0",
    "@nguniversal/builders": "15.2.1",
    "@popperjs/core": "2.11.6",
    "@tkrotoff/bootstrap-input-spinner": "0.20.5",
    "@types/express": "4.17.14",
    "@types/jasmine": "4.3.0",
    "@types/jasminewd2": "2.0.10",
    "@types/node": "18.11.9",
    "@typescript-eslint/eslint-plugin": "^5.61.0",
    "@typescript-eslint/parser": "^5.61.0",
    "bootstrap": "5.2.2",
    "codelyzer": "6.0.2",
    "cookieconsent": "3.1.1",
    "eslint": "^8.44.0",
    "jasmine-core": "4.5.0",
    "jasmine-spec-reporter": "7.0.0",
    "karma": "6.4.1",
    "karma-chrome-launcher": "3.1.1",
    "karma-coverage-istanbul-reporter": "3.0.3",
    "karma-jasmine": "5.1.0",
    "karma-jasmine-html-reporter": "2.0.0",
    "line-awesome": "1.3.0",
    "ngx-cookieconsent": "4.0.1",
    "protractor": "7.0.0",
    "stacktrace-js": "2.0.2",
    "ts-node": "10.9.1",
    "tslint": "6.1.3",
    "typescript": "4.8.4"
  }
}

tslint.json

{
  "extends": "tslint:recommended",
  "rules": {
    "array-type": false,
    "arrow-parens": false,
    "deprecation": {
      "severity": "warn"
    },
    "component-class-suffix": true,
    "contextual-lifecycle": true,
    "directive-class-suffix": true,
    "directive-selector": [
      true,
      "attribute",
      "app",
      "camelCase"
    ],
    "component-selector": [
      true,
      "element",
      "app",
      "kebab-case"
    ],
    "import-blacklist": [
      true,
      "rxjs/Rx"
    ],
    "interface-name": false,
    "max-classes-per-file": false,
    "max-line-length": [
      true,
      140
    ],
    "member-access": false,
    "member-ordering": [
      true,
      {
        "order": [
          "static-field",
          "instance-field",
          "static-method",
          "instance-method"
        ]
      }
    ],
    "no-consecutive-blank-lines": false,
    "no-console": [
      true,
      "debug",
      "info",
      "time",
      "timeEnd",
      "trace"
    ],
    "no-empty": false,
    "no-inferrable-types": [
      true,
      "ignore-params"
    ],
    "no-non-null-assertion": true,
    "no-redundant-jsdoc": true,
    "no-switch-case-fall-through": true,
    "no-use-before-declare": true,
    "no-var-requires": false,
    "object-literal-key-quotes": [
      true,
      "as-needed"
    ],
    "object-literal-sort-keys": false,
    "ordered-imports": false,
    "quotemark": [
      true,
      "single"
    ],
    "trailing-comma": false,
    "no-conflicting-lifecycle": true,
    "no-host-metadata-property": true,
    "no-input-rename": true,
    "no-inputs-metadata-property": true,
    "no-output-native": true,
    "no-output-on-prefix": true,
    "no-output-rename": true,
    "no-outputs-metadata-property": true,
    "template-banana-in-box": true,
    "template-no-negated-async": true,
    "use-lifecycle-interface": true,
    "use-pipe-transform-interface": true
  },
  "rulesDirectory": [
    "codelyzer"
  ]
}

Hmm, very interesting! Thanks for posting the package files - can I also ask what package manager you're using to run them, and if you can also post its lockfile?

Just npm and ng (this is an angular project) to manage versions and upgrades, here's the lock file:

https://gist.github.com/Routhinator/62ac49468c64879abf82cf8622707915

Hmm, it works on my machine πŸ˜•. I made a new project directory with your package.json, package-lock.json, and tslint.json. npx tslint-to-eslint-config failed with:

❌ Could not start tslint-to-eslint: ❌
  Command failed: tslint --print-config "./tslint.json"
Failed to load /Users/josh/repos/tslinttemp/tslint.json: Could not find custom rule directory: codelyzer

After a mkdir codelyzer, re-running npx tslint-to-eslint-config succeeded with:

✨ 98 rules replaced with their ESLint equivalents. ✨

❗ 6 ESLint rules behave differently from their TSLint counterparts ❗
  Check ./tslint-to-eslint-config.log for details.

☠ Prettier plugins are missing from your configuration. ☠
  We highly recommend running tslint-to-eslint-config --prettier to disable formatting ESLint rules.
  See https://github.com/typescript-eslint/tslint-to-eslint-config/blob/master/docs/FAQs.md#should-i-use-prettier.

⚑ 8 new packages are required for this ESLint configuration. ⚑
  npm install @angular-eslint/eslint-plugin @angular-eslint/eslint-plugin-template @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint eslint-plugin-import eslint-plugin-jsdoc eslint-plugin-prefer-arrow --save-dev

β™» Consider using --comments to replace TSLint comment directives in your source files. β™»

βœ… All is well! βœ…
Created .eslintrc.js
/*
πŸ‘‹ Hi! This file was autogenerated by tslint-to-eslint-config.
https://github.com/typescript-eslint/tslint-to-eslint-config

It represents the closest reasonable ESLint configuration to this
project's original TSLint configuration.

We recommend eventually switching this configuration to extend from
the recommended rulesets in typescript-eslint. 
https://github.com/typescript-eslint/tslint-to-eslint-config/blob/master/docs/FAQs.md

Happy linting! πŸ’–
*/
module.exports = {
    "env": {
        "browser": true,
        "es6": true
    },
    "extends": [
        "plugin:@typescript-eslint/recommended",
        "plugin:@typescript-eslint/recommended-requiring-type-checking"
    ],
    "parser": "@typescript-eslint/parser",
    "parserOptions": {
        "project": "tsconfig.json",
        "sourceType": "module"
    },
    "plugins": [
        "eslint-plugin-import",
        "@angular-eslint/eslint-plugin",
        "eslint-plugin-jsdoc",
        "@angular-eslint/eslint-plugin-template",
        "eslint-plugin-prefer-arrow",
        "@typescript-eslint"
    ],
    "root": true,
    "rules": {
        "@angular-eslint/component-class-suffix": "error",
        "@angular-eslint/component-selector": [
            "error",
            {
                "type": "element",
                "prefix": "app",
                "style": "kebab-case"
            }
        ],
        "@angular-eslint/contextual-lifecycle": "error",
        "@angular-eslint/directive-class-suffix": "error",
        "@angular-eslint/directive-selector": [
            "error",
            {
                "type": "attribute",
                "prefix": "app",
                "style": "camelCase"
            }
        ],
        "@angular-eslint/no-conflicting-lifecycle": "error",
        "@angular-eslint/no-host-metadata-property": "error",
        "@angular-eslint/no-input-rename": "error",
        "@angular-eslint/no-inputs-metadata-property": "error",
        "@angular-eslint/no-output-native": "error",
        "@angular-eslint/no-output-on-prefix": "error",
        "@angular-eslint/no-output-rename": "error",
        "@angular-eslint/no-outputs-metadata-property": "error",
        "@angular-eslint/template/banana-in-box": "error",
        "@angular-eslint/template/eqeqeq": "error",
        "@angular-eslint/template/no-negated-async": "error",
        "@angular-eslint/use-lifecycle-interface": "error",
        "@angular-eslint/use-pipe-transform-interface": "error",
        "@typescript-eslint/adjacent-overload-signatures": "error",
        "@typescript-eslint/array-type": "off",
        "@typescript-eslint/ban-types": [
            "error",
            {
                "types": {
                    "Object": {
                        "message": "Avoid using the `Object` type. Did you mean `object`?"
                    },
                    "Function": {
                        "message": "Avoid using the `Function` type. Prefer a specific function type, like `() => void`."
                    },
                    "Boolean": {
                        "message": "Avoid using the `Boolean` type. Did you mean `boolean`?"
                    },
                    "Number": {
                        "message": "Avoid using the `Number` type. Did you mean `number`?"
                    },
                    "String": {
                        "message": "Avoid using the `String` type. Did you mean `string`?"
                    },
                    "Symbol": {
                        "message": "Avoid using the `Symbol` type. Did you mean `symbol`?"
                    }
                }
            }
        ],
        "@typescript-eslint/consistent-type-assertions": "error",
        "@typescript-eslint/dot-notation": "error",
        "@typescript-eslint/explicit-function-return-type": "off",
        "@typescript-eslint/explicit-member-accessibility": [
            "off",
            {
                "accessibility": "explicit"
            }
        ],
        "@typescript-eslint/explicit-module-boundary-types": "off",
        "@typescript-eslint/member-ordering": "error",
        "@typescript-eslint/naming-convention": [
            "off",
            {
                "selector": "variable",
                "format": [
                    "camelCase",
                    "UPPER_CASE",
                    "PascalCase"
                ],
                "leadingUnderscore": "allow",
                "trailingUnderscore": "forbid"
            }
        ],
        "@typescript-eslint/no-empty-function": "off",
        "@typescript-eslint/no-empty-interface": "error",
        "@typescript-eslint/no-explicit-any": "off",
        "@typescript-eslint/no-inferrable-types": [
            "error",
            {
                "ignoreParameters": true
            }
        ],
        "@typescript-eslint/no-misused-new": "error",
        "@typescript-eslint/no-namespace": "error",
        "@typescript-eslint/no-non-null-assertion": "error",
        "@typescript-eslint/no-parameter-properties": "off",
        "@typescript-eslint/no-shadow": [
            "error",
            {
                "hoist": "all"
            }
        ],
        "@typescript-eslint/no-unused-expressions": "error",
        "@typescript-eslint/no-use-before-define": "error",
        "@typescript-eslint/no-var-requires": "off",
        "@typescript-eslint/prefer-for-of": "error",
        "@typescript-eslint/prefer-function-type": "error",
        "@typescript-eslint/prefer-namespace-keyword": "error",
        "@typescript-eslint/quotes": [
            "error",
            "single"
        ],
        "@typescript-eslint/triple-slash-reference": [
            "error",
            {
                "path": "always",
                "types": "prefer-import",
                "lib": "always"
            }
        ],
        "@typescript-eslint/typedef": "off",
        "@typescript-eslint/unified-signatures": "error",
        "arrow-parens": [
            "off",
            "always"
        ],
        "comma-dangle": "off",
        "complexity": "off",
        "constructor-super": "error",
        "dot-notation": "off",
        "eqeqeq": [
            "error",
            "smart"
        ],
        "guard-for-in": "error",
        "id-denylist": [
            "error",
            "any",
            "Number",
            "number",
            "String",
            "string",
            "Boolean",
            "boolean",
            "Undefined",
            "undefined"
        ],
        "id-match": "error",
        "import/no-deprecated": "warn",
        "import/order": [
            "off",
            {
                "alphabetize": {
                    "caseInsensitive": true,
                    "order": "asc"
                },
                "newlines-between": "ignore",
                "groups": [
                    [
                        "builtin",
                        "external",
                        "internal",
                        "unknown",
                        "object",
                        "type"
                    ],
                    "parent",
                    [
                        "sibling",
                        "index"
                    ]
                ],
                "distinctGroup": false,
                "pathGroupsExcludedImportTypes": [],
                "pathGroups": [
                    {
                        "pattern": "./",
                        "patternOptions": {
                            "nocomment": true,
                            "dot": true
                        },
                        "group": "sibling",
                        "position": "before"
                    },
                    {
                        "pattern": ".",
                        "patternOptions": {
                            "nocomment": true,
                            "dot": true
                        },
                        "group": "sibling",
                        "position": "before"
                    },
                    {
                        "pattern": "..",
                        "patternOptions": {
                            "nocomment": true,
                            "dot": true
                        },
                        "group": "parent",
                        "position": "before"
                    },
                    {
                        "pattern": "../",
                        "patternOptions": {
                            "nocomment": true,
                            "dot": true
                        },
                        "group": "parent",
                        "position": "before"
                    }
                ]
            }
        ],
        "jsdoc/check-alignment": "error",
        "jsdoc/check-indentation": "error",
        "jsdoc/newline-after-description": "error",
        "jsdoc/no-types": "error",
        "max-classes-per-file": "off",
        "max-len": [
            "error",
            {
                "code": 140
            }
        ],
        "new-parens": "error",
        "no-bitwise": "error",
        "no-caller": "error",
        "no-cond-assign": "error",
        "no-console": [
            "error",
            {
                "allow": [
                    "log",
                    "warn",
                    "dir",
                    "timeLog",
                    "assert",
                    "clear",
                    "count",
                    "countReset",
                    "group",
                    "groupEnd",
                    "table",
                    "dirxml",
                    "error",
                    "groupCollapsed",
                    "Console",
                    "profile",
                    "profileEnd",
                    "timeStamp",
                    "context",
                    "createTask"
                ]
            }
        ],
        "no-debugger": "error",
        "no-empty": "off",
        "no-empty-function": "off",
        "no-eval": "error",
        "no-fallthrough": "error",
        "no-invalid-this": "off",
        "no-multiple-empty-lines": "off",
        "no-new-wrappers": "error",
        "no-restricted-imports": [
            "error",
            "rxjs/Rx"
        ],
        "no-shadow": "off",
        "no-throw-literal": "error",
        "no-trailing-spaces": "error",
        "no-undef-init": "error",
        "no-underscore-dangle": "off",
        "no-unsafe-finally": "error",
        "no-unused-expressions": "off",
        "no-unused-labels": "error",
        "no-use-before-define": "off",
        "no-var": "error",
        "object-shorthand": "error",
        "one-var": [
            "error",
            "never"
        ],
        "prefer-arrow/prefer-arrow-functions": "error",
        "prefer-const": "error",
        "quote-props": [
            "error",
            "as-needed"
        ],
        "quotes": "off",
        "radix": "error",
        "spaced-comment": [
            "error",
            "always",
            {
                "markers": [
                    "/"
                ]
            }
        ],
        "use-isnan": "error",
        "valid-typeof": "off"
    }
};

If you're interested in getting to the bottom of this, src/input/findReportedConfiguration.js is where the tslint --print-config command is run (called by src/input/findTSLintConfiguration.js). If you put a console.log({ stderr, stdout }) in the execAndCatch function maybe that'll log something interesting?

Sadly I'm not sure where you mean when you say execAndCatch section as I do not see that in this file:

import { Exec } from "../adapters/exec";
export type DeepPartial<T> = {
    [P in keyof T]?: T[P] extends Record<string, unknown> ? DeepPartial<T[P]> : T[P];
};
export type FindReportedConfigurationDependencies = {
    exec: Exec;
    platform: string;
};
export declare const findReportedConfiguration: <Configuration>(exec: Exec, command: string, config: string) => Promise<Error | DeepPartial<Configuration>>;

Also I ran a mkdir codelyzer as you did, and could not repoduce your success either.

routhinator@devbox:~/projects/theden/angular$ mkdir codelyzer
routhinator@devbox:~/projects/theden/angular$ npx tslint-to-eslint-config --comments
❌ Could not start tslint-to-eslint: ❌
  Command failed: tslint --print-config "./tslint.json"

routhinator@devbox:~/projects/theden/angular$ 

I'm tempted to just take the eslint config you generated and move on, but also curious as to how this broke this way to begin with.

That's the .d.ts file. I'm suggesting looking at the .js equivalent to this source file:

const execAndCatch = async (exec: Exec, fullCommand: string): Promise<string | Error> => {

...and yeah I too am very curious πŸ˜„ but would understand if you don't have time to go down this investigation.

After some more fiddling I decided to reset and go with the tools/instructions in @angular-eslint/schematics as it made my life easier and completed the conversion without issues.. even though it used this same tool under the hood.

Not sure what it was but I needed to timebox this :)