diff --git a/.changeset/thin-eggs-bathe.md b/.changeset/thin-eggs-bathe.md new file mode 100644 index 00000000000..ba59b285f3d --- /dev/null +++ b/.changeset/thin-eggs-bathe.md @@ -0,0 +1,6 @@ +--- +'@clerk/dev-cli': patch +'@clerk/upgrade': patch +--- + +Replace `globby` dependency with `tinyglobby` for smaller bundle size and faster installation diff --git a/package.json b/package.json index 3107126afa1..f443174ae8f 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,6 @@ "fs-extra": "^11.3.0", "get-port": "^5.1.1", "globals": "^15.15.0", - "globby": "^13.2.2", "http-proxy": "^1.18.1", "http-server": "^14.1.1", "husky": "^8.0.3", @@ -138,6 +137,7 @@ "rimraf": "6.0.1", "rolldown": "catalog:repo", "statuses": "^1.5.0", + "tinyglobby": "^0.2.15", "tree-kill": "^1.2.2", "ts-jest": "29.2.5", "tsdown": "catalog:repo", diff --git a/packages/dev-cli/package.json b/packages/dev-cli/package.json index 5da57139a34..1b5cee67bc5 100644 --- a/packages/dev-cli/package.json +++ b/packages/dev-cli/package.json @@ -27,8 +27,8 @@ "commander": "^14.0.1", "concurrently": "^9.2.1", "dotenv": "^17.2.3", - "globby": "^14.1.0", - "jscodeshift": "^17.3.0" + "jscodeshift": "^17.3.0", + "tinyglobby": "^0.2.15" }, "devDependencies": {}, "engines": { diff --git a/packages/dev-cli/src/utils/getClerkPackages.js b/packages/dev-cli/src/utils/getClerkPackages.js index 01a46c90089..b2d760a6b99 100644 --- a/packages/dev-cli/src/utils/getClerkPackages.js +++ b/packages/dev-cli/src/utils/getClerkPackages.js @@ -1,7 +1,7 @@ import { readFile } from 'node:fs/promises'; import { dirname, posix } from 'node:path'; -import { globby } from 'globby'; +import { glob } from 'tinyglobby'; import { NULL_ROOT_ERROR } from './errors.js'; import { getMonorepoRoot } from './getMonorepoRoot.js'; @@ -17,7 +17,7 @@ export async function getClerkPackages() { } /** @type {Record} */ const packages = {}; - const clerkPackages = await globby([posix.join(monorepoRoot, 'packages', '*', 'package.json'), '!*node_modules*']); + const clerkPackages = await glob([posix.join(monorepoRoot, 'packages', '*', 'package.json'), '!*node_modules*']); for (const packageJSON of clerkPackages) { const { name } = JSON.parse(await readFile(packageJSON, 'utf-8')); if (name) { diff --git a/packages/upgrade/package.json b/packages/upgrade/package.json index 9679a7cd17d..5b9be885ede 100644 --- a/packages/upgrade/package.json +++ b/packages/upgrade/package.json @@ -35,7 +35,6 @@ "chalk": "^5.3.0", "ejs": "3.1.10", "execa": "9.4.1", - "globby": "^14.0.1", "gray-matter": "^4.0.3", "index-to-position": "^0.1.2", "jscodeshift": "^17.0.0", @@ -43,7 +42,8 @@ "meow": "^11.0.0", "read-pkg": "^9.0.1", "semver-regex": "^4.0.5", - "temp-dir": "^3.0.0" + "temp-dir": "^3.0.0", + "tinyglobby": "^0.2.15" }, "devDependencies": { "@babel/cli": "^7.24.7", diff --git a/packages/upgrade/src/codemods/index.js b/packages/upgrade/src/codemods/index.js index e766cbdb24f..36be9a1b7a1 100644 --- a/packages/upgrade/src/codemods/index.js +++ b/packages/upgrade/src/codemods/index.js @@ -2,8 +2,8 @@ import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import chalk from 'chalk'; -import { globby } from 'globby'; import { run } from 'jscodeshift/src/Runner.js'; +import { glob } from 'tinyglobby'; const __dirname = dirname(fileURLToPath(import.meta.url)); @@ -33,13 +33,13 @@ const GLOBBY_IGNORE = [ '**/*.{css,scss,sass,less,styl}', ]; -export async function runCodemod(transform = 'transform-async-request', glob, options = {}) { +export async function runCodemod(transform = 'transform-async-request', patterns, options = {}) { if (!transform) { throw new Error('No transform provided'); } const resolvedPath = resolve(__dirname, `${transform}.cjs`); - const paths = await globby(glob, { ignore: GLOBBY_IGNORE }); + const paths = await glob(patterns, { ignore: GLOBBY_IGNORE }); if (options.skipCodemods) { return { diff --git a/packages/upgrade/src/runner.js b/packages/upgrade/src/runner.js index b27a4e5c23f..3bd07a0ebac 100644 --- a/packages/upgrade/src/runner.js +++ b/packages/upgrade/src/runner.js @@ -2,8 +2,8 @@ import fs from 'node:fs/promises'; import path from 'node:path'; import chalk from 'chalk'; -import { convertPathToPattern, globby } from 'globby'; import indexToPosition from 'index-to-position'; +import { glob } from 'tinyglobby'; import { getCodemodConfig, runCodemod } from './codemods/index.js'; import { createSpinner, renderCodemodResults } from './render.js'; @@ -68,8 +68,10 @@ export async function runScans(config, sdk, options) { const spinner = createSpinner('Scanning files for breaking changes...'); try { - const pattern = convertPathToPattern(path.resolve(options.dir)); - const files = await globby(pattern, { + const cwd = path.resolve(options.dir); + const files = await glob('**/*', { + cwd, + absolute: true, ignore: [...GLOBBY_IGNORE, ...(options.ignore || [])], }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 232cb752a0f..4bbb3ed5f9a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -215,9 +215,6 @@ importers: globals: specifier: ^15.15.0 version: 15.15.0 - globby: - specifier: ^13.2.2 - version: 13.2.2 http-proxy: specifier: ^1.18.1 version: 1.18.1 @@ -275,6 +272,9 @@ importers: statuses: specifier: ^1.5.0 version: 1.5.0 + tinyglobby: + specifier: ^0.2.15 + version: 0.2.15 tree-kill: specifier: ^1.2.2 version: 1.2.2 @@ -526,12 +526,12 @@ importers: dotenv: specifier: ^17.2.3 version: 17.2.3 - globby: - specifier: ^14.1.0 - version: 14.1.0 jscodeshift: specifier: ^17.3.0 version: 17.3.0(@babel/preset-env@7.28.5(@babel/core@7.28.5)) + tinyglobby: + specifier: ^0.2.15 + version: 0.2.15 packages/expo: dependencies: @@ -976,9 +976,6 @@ importers: execa: specifier: 9.4.1 version: 9.4.1 - globby: - specifier: ^14.0.1 - version: 14.1.0 gray-matter: specifier: ^4.0.3 version: 4.0.3 @@ -1003,6 +1000,9 @@ importers: temp-dir: specifier: ^3.0.0 version: 3.0.0 + tinyglobby: + specifier: ^0.2.15 + version: 0.2.15 devDependencies: '@babel/cli': specifier: ^7.24.7 @@ -4427,10 +4427,6 @@ packages: resolution: {integrity: sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ==} engines: {node: '>=18'} - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} @@ -8581,10 +8577,6 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} - globby@15.0.0: resolution: {integrity: sha512-oB4vkQGqlMl682wL1IlWd02tXCbquGWM4voPEI85QmNKCaw8zGTm1f1rubFgkg3Eli2PtKlFgrnmUqasbQWlkw==} engines: {node: '>=20'} @@ -19081,8 +19073,6 @@ snapshots: '@sindresorhus/is@7.1.1': {} - '@sindresorhus/merge-streams@2.3.0': {} - '@sindresorhus/merge-streams@4.0.0': {} '@sinonjs/commons@3.0.1': @@ -24284,15 +24274,6 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.5 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - globby@15.0.0: dependencies: '@sindresorhus/merge-streams': 4.0.0 diff --git a/scripts/format-non-workspace.mjs b/scripts/format-non-workspace.mjs index 7c0c85ecde4..9f6b18c1e8d 100644 --- a/scripts/format-non-workspace.mjs +++ b/scripts/format-non-workspace.mjs @@ -1,6 +1,6 @@ #!/usr/bin/env node -import { globby } from 'globby'; +import { glob } from 'tinyglobby'; import { $ } from 'zx'; const ROOT_FILE_PATTERNS = ['*.cjs', '*.js', '*.json', '*.md', '*.mjs', '*.ts', '*.yaml']; @@ -16,7 +16,7 @@ async function getExistingFiles() { for (const pattern of ROOT_FILE_PATTERNS) { try { - const matches = await globby(pattern, { + const matches = await glob(pattern, { ignore: ['node_modules/**', '**/node_modules/**', 'packages/**'], }); existingFiles.push(...matches); @@ -27,7 +27,7 @@ async function getExistingFiles() { for (const pattern of NON_WORKSPACE_PATTERNS) { try { - const matches = await globby(pattern, { + const matches = await glob(pattern, { ignore: [ 'node_modules/**', '**/node_modules/**', diff --git a/scripts/notify.mjs b/scripts/notify.mjs index 5f5a7b67ab0..b5cb6bacd6e 100644 --- a/scripts/notify.mjs +++ b/scripts/notify.mjs @@ -1,7 +1,7 @@ import { fileURLToPath } from 'node:url'; import fs from 'fs-extra'; -import { globby as glob } from 'globby'; +import { glob } from 'tinyglobby'; const { GITHUB_REF = 'main' } = process.env; const baseUrl = new URL(`https://github.com/clerk/javascript/blob/${GITHUB_REF}/`); diff --git a/scripts/renovate-config-generator.mjs b/scripts/renovate-config-generator.mjs index 89934ae58ed..be2abf4b82c 100644 --- a/scripts/renovate-config-generator.mjs +++ b/scripts/renovate-config-generator.mjs @@ -2,7 +2,7 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; import fs from 'fs-extra'; -import { globby } from 'globby'; +import { glob } from 'tinyglobby'; import JSON5 from 'json5'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -110,7 +110,7 @@ const defaultRules = [ ]; const getPackageNames = async () => { - const files = await globby('./packages/*/package.json', { cwd: ROOT_DIR }); + const files = await glob('./packages/*/package.json', { cwd: ROOT_DIR }); let names = []; for (const file of files) {