Skip to content

Commit 6f51c43

Browse files
committed
chore(setup-packages): replace semver with std-semver
Replaces the `semver` npm package (and its `@types/semver` types) with `std-semver`, an npm port of the Deno standard library `@std/semver`. Since `std-semver` has no `coerce` function, a small local helper is added that extracts the first `X.Y.Z` from an engines range string and delegates to `tryParse`.
1 parent dd4a493 commit 6f51c43

File tree

3 files changed

+20
-15
lines changed

3 files changed

+20
-15
lines changed

internals/setup-packages/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@
1111
"dependencies": {
1212
"globby": "^16.0.0",
1313
"jsonc-parser": "^3.3.1",
14-
"semver": "^7.7.3"
14+
"std-semver": "^1.0.8"
1515
},
1616
"devDependencies": {
1717
"@repo/tsconfig": "workspace:*",
18-
"@types/semver": "^7.7.1",
1918
"type-fest": "^5.2.0"
2019
},
2120
"engines": {

internals/setup-packages/src/bin.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
#!/usr/bin/env node
22
import path from 'node:path';
33
import fs from 'node:fs/promises';
4-
import semver from 'semver';
4+
import { lessThan, tryParse } from 'std-semver';
55
import { globby } from 'globby';
66
import { parse as parseJsonc } from 'jsonc-parser';
77
import type { PackageJson, TsConfigJson } from 'type-fest';
88
import { fixPeerDeps } from './hoist-peer-dependencies.ts';
99

1010
type ExportDef = Exclude<PackageJson['exports'], undefined | null>;
1111

12+
function coerce(version: string | undefined) {
13+
if (!version) return undefined;
14+
const match = version.match(/(\d+\.\d+\.\d+)/);
15+
if (!match) return undefined;
16+
return tryParse(match[1]!);
17+
}
18+
1219
function readFile(filepath: string) {
1320
return fs.readFile(filepath, 'utf8');
1421
}
@@ -40,7 +47,7 @@ async function writeJSONFile(filepath: string, content: unknown) {
4047
}
4148

4249
const rootPkg = await readJSONFile<PackageJson>(path.join(process.cwd(), 'package.json'));
43-
const rootNodeVersion = semver.coerce(rootPkg.engines?.['node']);
50+
const rootNodeVersion = coerce(rootPkg.engines?.['node']);
4451
if (!Array.isArray(rootPkg.workspaces) || rootNodeVersion == null) {
4552
throw new Error(
4653
'[Inquirer] The scaffolding tool requires `workspaces` and `engines.node` in the root package.json',
@@ -73,8 +80,8 @@ for (const [pkgPath, pkg] of packages) {
7380
pkg.sideEffects ??= false;
7481

7582
// Set min engines version.
76-
const pkgNodeVersion = semver.coerce(pkg.engines['node']);
77-
if (pkgNodeVersion == null || semver.lt(pkgNodeVersion, rootNodeVersion)) {
83+
const pkgNodeVersion = coerce(pkg.engines['node']);
84+
if (pkgNodeVersion == null || lessThan(pkgNodeVersion, rootNodeVersion)) {
7885
pkg.engines['node'] = rootPkg.engines?.['node'];
7986
}
8087

yarn.lock

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2297,13 +2297,6 @@ __metadata:
22972297
languageName: node
22982298
linkType: hard
22992299

2300-
"@types/semver@npm:^7.7.1":
2301-
version: 7.7.1
2302-
resolution: "@types/semver@npm:7.7.1"
2303-
checksum: 10/8f09e7e6ca3ded67d78ba7a8f7535c8d9cf8ced83c52e7f3ac3c281fe8c689c3fe475d199d94390dc04fc681d51f2358b430bb7b2e21c62de24f2bee2c719068
2304-
languageName: node
2305-
linkType: hard
2306-
23072300
"@types/stack-utils@npm:^2.0.3":
23082301
version: 2.0.3
23092302
resolution: "@types/stack-utils@npm:2.0.3"
@@ -6137,10 +6130,9 @@ __metadata:
61376130
resolution: "setup-packages@workspace:internals/setup-packages"
61386131
dependencies:
61396132
"@repo/tsconfig": "workspace:*"
6140-
"@types/semver": "npm:^7.7.1"
61416133
globby: "npm:^16.0.0"
61426134
jsonc-parser: "npm:^3.3.1"
6143-
semver: "npm:^7.7.3"
6135+
std-semver: "npm:^1.0.8"
61446136
type-fest: "npm:^5.2.0"
61456137
bin:
61466138
setup-packages: ./src/bin.ts
@@ -6397,6 +6389,13 @@ __metadata:
63976389
languageName: node
63986390
linkType: hard
63996391

6392+
"std-semver@npm:^1.0.8":
6393+
version: 1.0.8
6394+
resolution: "std-semver@npm:1.0.8"
6395+
checksum: 10/b109198278710ac854bd035a84ec3e23e1f985ff07cbefbcfdcaf5b3bf99a7110dcca3ec5f808ebe99bed1d4056880cd929bf3eb199c6850f7a6f136d78825d7
6396+
languageName: node
6397+
linkType: hard
6398+
64006399
"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.3":
64016400
version: 4.2.3
64026401
resolution: "string-width@npm:4.2.3"

0 commit comments

Comments
 (0)