npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ts-strict-lint-migrate

v0.0.29

Published

Incrementally enforce typescript strict mode and lint selectively for new files (staged, and commited after date)

Downloads

11

Readme

ts-strict-lint-migrate

Migrating from JavaScript to strict TypeScript and ESLint all at once is hard.

This library makes the transition easy by strict type-checking and linting only new files added to git after the desired leak date, ie. the date you start your migration.

  1. Install the package
npm install --save-dev ts-strict-lint-migrate
  1. Add npm script command to your project's package.json to run ts-strict-lint-migrate

my-typescript-project/package.json

{
  "name": "my-typescript-project",
  "version": "0.0.1",
  "main": "index.tsx",
  "scripts": {
    "start": "...",
    "ts-strict-lint-migrate": "ts-node ./tsStrictLintMigrateRunner/run.ts"
  },
  "devDependencies": {
    "ts-node": "^10.9.1",
    "ts-strict-lint-migrate": "^0.0.9",
    "typescript": "^4.8.4"
  }
}
  1. Add new file to configure and run ts-strict-lint-migrate

my-typescript-project/tsStrictLintMigratRunner/run.ts

import {createTsStrictLintMigrate, RunTsStrictLintMigrateResult} from 'ts-strict-lint-migrate'

async function run(): Promise<void> {
  const tsStrictLintMigrate = await createTsStrictLintMigrate({
    // Base path of your repository directory.
    // This is needed for git operations.
    repoPath: `${__dirname}/../`,

    // Files (or globs) to watch in watch mode 
    // (when watchIncludedFiles is true).
    // This allows you to be more selective when watching,
    // to reduce resource usage
    watchFiles: [`${__dirname}/../src/**/*`],

    // ignore files from the watchFiles array
    ignoreFilesFromWatch: /some-file-regex.ts/,

    // all committed files from this date to present 
    // that should strict type checked and linted
    leakDate: "2020-01-01",

    // In case you want to make sure no one can bypass your strict type checking
    // and linting, you can turn on this option in your CI/CD pipeline
    // so builds will fail for the given Pull Request if anyone
    // tries to back-date files.
    // This option includes ALL files committed in the current branch that 
    // are not in master, regardless of leakDate.
    // default: false
    includeAllCurrentBranchCommitedFilesNotInMaster: !!process.env.CI,


    // This option is similar to the above, but respects
    // the leak date. It is a more relaxed option to use in CI/CD,
    // and theoretically could allow devs to bypass if they know
    // how to back-date files.
    // Any files in the current branch that were added after
    // the leak date will be strict type checked and linted.
    includeCurrentBranchCommitedFiles: !!process.env.CI,


    // This option should be used in a pre-commit hook for good DX
    // (also good to use in watch mode)
    // default: false
    includeStagedFiles: !process.env.CI,

    // This option is great to use in watch mode
    // default: false
    includeUnstagedFiles: !process.env.CI,

    // this option enables watch mode for any files included by the above options
    // default: false
    watchIncludedFiles: !process.env.CI,

    // Any Typescript compiler options
    tsConfig: {
      // helpful to set baseUrl to
      // adjust ts import paths
      baseUrl: `${__dirname}/../src`,
      paths: {
        "some-alias/*": ["*"],
      }
    },

    // Any eslint configuration
    esLintConfig: {
      settings: {
        // react version is required as it should not be inferred
          "react": {
            "version": "16.6.3"
          }
      }
    },
    onResults: ({success, lintResults, tsResults}: RunTsStrictLintMigrateResult)=>{
      if(!success){
        tsResults?.prettyResult && console.log("\nTypescript Errors\n\n", tsResults.prettyResult)
        lintResults?.prettyResult && console.log("\nESLint Errors\n\n", lintResults.prettyResult)
        console.error("\n\nFailed ts strict type checking and linting. Please fixe the errors above. \n\n")

        // Exit process error if running in CI
        if(process.env.CI){
          process.exit(1)
        }
      }
    }
  })

  await tsStrictLintMigrate.run()


}

run().catch((e)=>{
  console.error(e)
  process.exit(1)
})
  1. Run the script from the command line of your project
npm run ts-strict-lint-migrate