Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/busy-tires-admire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@clerk/upgrade': major
---

Updates the upgrade CLI to support Core 3 changes. If you need to upgrade to an older release, use the previous major version of this package.
3 changes: 2 additions & 1 deletion eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ export default tseslint.config([
'packages/clerk-js/rspack.config.js',
'packages/shared/src/compiled/path-to-regexp/index.js',
'packages/shared/tsdown.config.mjs',
'packages/upgrade/src/__tests__/fixtures/**/*',
],
},
{
Expand Down Expand Up @@ -488,7 +489,7 @@ export default tseslint.config([
name: 'packages/upgrade',
files: ['packages/upgrade/src/**/*'],
rules: {
'import/no-unresolved': ['error', { ignore: ['^#', '^~', '@inkjs/ui', '^ink'] }],
'custom-rules/no-unstable-methods': 'off',
'react/no-unescaped-entities': 'off',
'@typescript-eslint/no-floating-promises': 'warn',
},
Expand Down
7 changes: 0 additions & 7 deletions packages/upgrade/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,21 +32,14 @@
]
},
"dependencies": {
"@inkjs/ui": "^2.0.0",
"@jescalan/ink-markdown": "^2.0.0",
"ejs": "3.1.10",
"execa": "9.4.1",
"globby": "^14.0.1",
"gray-matter": "^4.0.3",
"index-to-position": "^0.1.2",
"ink": "^5.0.1",
"ink-big-text": "^2.0.0",
"ink-gradient": "^3.0.0",
"ink-link": "^4.1.0",
"jscodeshift": "^17.0.0",
"marked": "^11.1.1",
"meow": "^11.0.0",
"react": "catalog:react",
"read-pkg": "^9.0.1",
"semver-regex": "^4.0.5",
"temp-dir": "^3.0.0"
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "test-expo-old",
"version": "1.0.0",
"dependencies": {
"@clerk/clerk-expo": "^2.0.0",
"expo": "^50.0.0",
"react": "^18.0.0",
"react-native": "^0.73.0"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { ClerkProvider, useAuth } from '@clerk/clerk-expo';

export default function App() {
return (
<ClerkProvider publishableKey='pk_test_xxx'>
<AuthStatus />
</ClerkProvider>
);
}

function AuthStatus() {
const { isSignedIn } = useAuth();
return <Text>{isSignedIn ? 'Signed in' : 'Signed out'}</Text>;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "test-nextjs-v6",
"version": "1.0.0",
"dependencies": {
"@clerk/nextjs": "^6.0.0",
"next": "^14.0.0",
"react": "^18.0.0"
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions packages/upgrade/src/__tests__/fixtures/nextjs-v6/src/app.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { ClerkProvider, useAuth, useUser } from '@clerk/nextjs';
import { dark } from '@clerk/nextjs/themes';

export default function App({ children }) {
return <ClerkProvider appearance={{ baseTheme: dark }}>{children}</ClerkProvider>;
}

export function UserProfile() {
const { isSignedIn } = useAuth();
const { user } = useUser();

if (!isSignedIn) {
return <div>Not signed in</div>;
}

return <div>Hello, {user?.firstName}</div>;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "test-nextjs-v7",
"version": "1.0.0",
"dependencies": {
"@clerk/nextjs": "^7.0.0",
"next": "^14.0.0",
"react": "^18.0.0"
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 16 additions & 0 deletions packages/upgrade/src/__tests__/fixtures/nextjs-v7/src/app.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { ClerkProvider, useAuth, useUser } from '@clerk/nextjs';

export default function App({ children }) {
return <ClerkProvider>{children}</ClerkProvider>;
}

export function UserProfile() {
const { isSignedIn } = useAuth();
const { user } = useUser();

if (!isSignedIn) {
return <div>Not signed in</div>;
}

return <div>Hello, {user?.firstName}</div>;
}
7 changes: 7 additions & 0 deletions packages/upgrade/src/__tests__/fixtures/no-clerk/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "test-no-clerk",
"version": "1.0.0",
"dependencies": {
"react": "^18.0.0"
}
}
8 changes: 8 additions & 0 deletions packages/upgrade/src/__tests__/fixtures/react-v6/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"name": "test-react-v6",
"version": "1.0.0",
"dependencies": {
"@clerk/clerk-react": "^5.0.0",
"react": "^18.0.0"
}
}
19 changes: 19 additions & 0 deletions packages/upgrade/src/__tests__/fixtures/react-v6/src/App.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { ClerkProvider, useUser } from '@clerk/react';

export default function App() {
return (
<ClerkProvider publishableKey='pk_test_xxx'>
<UserInfo />
</ClerkProvider>
);
}

function UserInfo() {
const { user, isSignedIn } = useUser();

if (!isSignedIn) {
return <div>Please sign in</div>;
}

return <div>Welcome, {user?.firstName}</div>;
}
2 changes: 2 additions & 0 deletions packages/upgrade/src/__tests__/fixtures/react-v6/yarn.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# yarn lockfile v1

60 changes: 60 additions & 0 deletions packages/upgrade/src/__tests__/helpers/create-fixture.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import { fileURLToPath } from 'node:url';

const __dirname = path.dirname(fileURLToPath(import.meta.url));
const FIXTURES_DIR = path.join(__dirname, '..', 'fixtures');

export function getFixturePath(fixtureName) {
return path.join(FIXTURES_DIR, fixtureName);
}

export function createTempFixture(fixtureName) {
const sourcePath = getFixturePath(fixtureName);
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), `clerk-upgrade-test-${fixtureName}-`));

copyDirSync(sourcePath, tempDir);

return {
path: tempDir,
cleanup() {
fs.rmSync(tempDir, { recursive: true, force: true });
},
};
}

function copyDirSync(src, dest) {
fs.mkdirSync(dest, { recursive: true });

const entries = fs.readdirSync(src, { withFileTypes: true });

for (const entry of entries) {
const srcPath = path.join(src, entry.name);
const destPath = path.join(dest, entry.name);

if (entry.isDirectory()) {
copyDirSync(srcPath, destPath);
} else {
fs.copyFileSync(srcPath, destPath);
}
}
}

export function readFixtureFile(fixtureName, filePath) {
return fs.readFileSync(path.join(getFixturePath(fixtureName), filePath), 'utf8');
}

export function writeFixtureFile(tempPath, filePath, content) {
const fullPath = path.join(tempPath, filePath);
fs.mkdirSync(path.dirname(fullPath), { recursive: true });
fs.writeFileSync(fullPath, content, 'utf8');
}

export function readTempFile(tempPath, filePath) {
return fs.readFileSync(path.join(tempPath, filePath), 'utf8');
}

export function fileExists(tempPath, filePath) {
return fs.existsSync(path.join(tempPath, filePath));
}
Loading
Loading