-
Notifications
You must be signed in to change notification settings - Fork 465
Expand file tree
/
Copy pathcommon.mjs
More file actions
73 lines (62 loc) · 2.15 KB
/
Copy pathcommon.mjs
File metadata and controls
73 lines (62 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import { readFile, writeFile } from 'fs/promises';
import { $ } from 'zx';
export const constants = {
ChangesetConfigFile: '.changeset/config.json',
};
export async function getChangesetIgnoredPackages() {
const config = JSON.parse(await readFile(constants.ChangesetConfigFile, 'utf-8'));
return new Set(config.ignore || []);
}
export async function getPackageJsonFiles() {
const result = await $`find packages -mindepth 2 -maxdepth 2 -name package.json`.quiet();
return result.stdout.trim().split('\n').filter(Boolean);
}
export async function getPackageNames() {
const packageJsonFiles = await getPackageJsonFiles();
const packageNames = [];
for (const file of packageJsonFiles) {
try {
const packageJsonContent = await readFile(file, 'utf-8');
const packageJson = JSON.parse(packageJsonContent);
if (packageJson.name) {
packageNames.push(packageJson.name);
}
} catch {
// package.json doesn't exist or is invalid, skip
}
}
return packageNames.sort();
}
/**
* Converts `workspace:^` to `workspace:*` for all @clerk/* dependencies.
* This ensures that snapshot/canary releases use exact versions instead of
* semver ranges, preventing issues like ^3.0.0-canary.v20251211 matching
* older versions like 3.0.0-snapshot.v20251204.
*/
export async function pinWorkspaceDeps() {
const packageJsonFiles = await getPackageJsonFiles();
for (const file of packageJsonFiles) {
try {
const content = await readFile(file, 'utf-8');
const packageJson = JSON.parse(content);
let modified = false;
for (const depType of ['dependencies', 'devDependencies', 'peerDependencies']) {
const deps = packageJson[depType];
if (!deps) {
continue;
}
for (const [name, version] of Object.entries(deps)) {
if (name.startsWith('@clerk/') && version === 'workspace:^') {
deps[name] = 'workspace:*';
modified = true;
}
}
}
if (modified) {
await writeFile(file, JSON.stringify(packageJson, null, 2) + '\n');
}
} catch {
// package.json doesn't exist or is invalid, skip
}
}
}