-
Notifications
You must be signed in to change notification settings - Fork 60
Expand file tree
/
Copy pathupdate-local-dependencies.ts
More file actions
61 lines (53 loc) · 1.88 KB
/
update-local-dependencies.ts
File metadata and controls
61 lines (53 loc) · 1.88 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
import { PackageJson } from 'type-fest'
import * as fs from 'node:fs'
import * as nodePath from 'node:path'
const packageJsonFile = new URL('./package.json', import.meta.url).pathname
const packageJson: PackageJson = JSON.parse(
(await fs.promises.readFile(packageJsonFile)).toString('utf-8')
)
const packagesUrl = new URL('../dist/packages', import.meta.url)
const aliases: Record<string, string> = {
'@codingame/monaco-vscode-extension-api': 'vscode',
'@codingame/monaco-vscode-editor-api': 'monaco-editor'
}
const packages = (await fs.promises.readdir(packagesUrl)).map((name) =>
nodePath.resolve(packagesUrl.pathname, name)
)
const allLocalDependencies = await Promise.all(
packages.map(async (absoluteDirectory) => {
const packageJsonPath = nodePath.resolve(absoluteDirectory, './package.json')
const packageName = (<PackageJson>(
JSON.parse((await fs.promises.readFile(packageJsonPath)).toString('utf-8'))
)).name!
return <[string, string]>[
aliases[packageName] ?? packageName,
`file:${nodePath.relative(nodePath.dirname(new URL(import.meta.url).pathname), absoluteDirectory)}`
]
})
)
const localDependencies = Object.fromEntries(
allLocalDependencies.filter(([name]) => !name.includes('rollup'))
)
const localDevDependencies = Object.fromEntries(
allLocalDependencies.filter(([name]) => name.includes('rollup'))
)
const newPackageJson = {
...packageJson,
dependencies: {
...Object.fromEntries(
Object.entries(packageJson.dependencies!).filter(
([, version]) => !version!.startsWith('file:')
)
),
...localDependencies
},
devDependencies: {
...Object.fromEntries(
Object.entries(packageJson.devDependencies!).filter(
([, version]) => !version!.startsWith('file:')
)
),
...localDevDependencies
}
}
await fs.promises.writeFile(packageJsonFile, JSON.stringify(newPackageJson, null, 2))