Skip to content

Commit

Permalink
feat(upgrade): Add initial spec of upgrade package
Browse files Browse the repository at this point in the history
  • Loading branch information
jescalan committed Jan 3, 2024
1 parent 124d9f3 commit 04d02a6
Show file tree
Hide file tree
Showing 102 changed files with 8,571 additions and 0 deletions.
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
**/node_modules/**
packages/*/dist/**
packages/eslint-config-custom/**
packages/upgrade
**/dist/*
**/build/*
**/.turbo/*
Expand Down
12 changes: 12 additions & 0 deletions packages/upgrade/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
root = true

[*]
indent_style = tab
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.yml]
indent_style = space
indent_size = 2
1 change: 1 addition & 0 deletions packages/upgrade/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* text=auto eol=lf
2 changes: 2 additions & 0 deletions packages/upgrade/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
dist
1 change: 1 addition & 0 deletions packages/upgrade/.prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dist
25 changes: 25 additions & 0 deletions packages/upgrade/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# @clerk/upgrade

A tool that helps with upgrading major versions of Clerk's SDKs.

## Usage

```bash
$ npx @clerk/upgrade
```

## Caveats

This tool uses regular expressions to scan for patterns that match breaking changes. This makes it run substantially faster and makes it more accessible for us at Clerk to author matchers for each breaking change, however it means that _we cannot gurarantee 100% accuracy of the results_. As such, it's important to treat this as a tool that can help you to complete your major version upgrades, rather than an automatic fix to all issues.

The main thing that this tool will miss is cases where _unusual import patterns_ are used in your codebase.As an example, if we made a breaking change to the `getAuth` function exported from `@clerk/nextjs`, we would likely look for something like `import { getAuth } from "@clerk/nextjs"` in order to detect whether you need to make some changes. If you were running your imports like `import * as ClerkNext from "@clerk/nextjs"`, you could use `getAuth` without us detecting it with our matcher.

It will also be very likely to miss if you bind a method on an object to a separate variable and call it from there, or pass a bound method through a function param. For example, something like this:

```js
const updateUser = user.update.bind(user);

updateUser({ username: 'foo' });
```

Overall, there's a very good chance that this tool catches everything, but it's not a guarantee, so make sure that you also test your app before deploying, and that you have good e2e test coverage, which are good practices normally anyway, rather than blindly trusting that since the clerk upgrade tool was run, you are for sure covered.

0 comments on commit 04d02a6

Please sign in to comment.