Skip to content

Commit e64f846

Browse files
authored
perf: drop package-json dep (#553)
* chore: drop package-json dep * changeset
1 parent 5bd342a commit e64f846

File tree

4 files changed

+35
-114
lines changed

4 files changed

+35
-114
lines changed

.changeset/brave-tires-poke.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'create-rock': patch
3+
---
4+
5+
perf: drop package-json dep

packages/create-app/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
"@rock-js/tools": "^0.10.2",
2525
"gradient-string": "^3.0.0",
2626
"minimist": "^1.2.8",
27-
"package-json": "^10.0.1",
2827
"tar": "^7.4.3",
2928
"tslib": "^2.3.0"
3029
},

packages/create-app/src/lib/utils/tarball.ts

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import fs from 'node:fs';
22
import path from 'node:path';
33
import { RockError } from '@rock-js/tools';
4-
import packageJson from 'package-json';
54
import * as tar from 'tar';
65
import { getNameWithoutExtension } from './fs.js';
76

@@ -11,17 +10,17 @@ export async function downloadTarballFromNpm(
1110
targetDir: string,
1211
) {
1312
try {
14-
const metadata = await packageJson(packageName, { version });
13+
const versionData = await getPackageVersionData(packageName, version);
1514

16-
const tarballUrl = metadata['dist']?.tarball;
15+
const tarballUrl = versionData.dist?.tarball;
1716
if (!tarballUrl) {
1817
throw new RockError('Tarball URL not found.');
1918
}
2019

21-
const response = await fetch(tarballUrl);
22-
if (!response.ok) {
20+
const tarballResponse = await fetch(tarballUrl);
21+
if (!tarballResponse.ok) {
2322
throw new RockError(
24-
`Failed to fetch package ${packageName}: ${response.statusText}`,
23+
`Failed to fetch package ${packageName}: ${tarballResponse.statusText}`,
2524
);
2625
}
2726

@@ -30,7 +29,7 @@ export async function downloadTarballFromNpm(
3029
`${packageName.replace('/', '-')}.tgz`,
3130
);
3231
// Write the tarball to disk
33-
const arrayBuffer = await response.arrayBuffer();
32+
const arrayBuffer = await tarballResponse.arrayBuffer();
3433
fs.writeFileSync(tarballPath, new Uint8Array(arrayBuffer));
3534

3635
return tarballPath;
@@ -41,6 +40,30 @@ export async function downloadTarballFromNpm(
4140
}
4241
}
4342

43+
async function getPackageVersionData(packageName: string, version: string) {
44+
// Fetch package metadata from npm registry
45+
const registryUrl = `https://registry.npmjs.org/${packageName}`;
46+
const response = await fetch(registryUrl);
47+
48+
if (!response.ok) {
49+
throw new RockError(
50+
`Failed to fetch package metadata for ${packageName}: ${response.statusText}`,
51+
);
52+
}
53+
54+
const metadata = await response.json();
55+
const versionTag = metadata['dist-tags']?.[version];
56+
const versionData = versionTag
57+
? metadata.versions?.[versionTag]
58+
: metadata.versions?.[version];
59+
if (!versionData) {
60+
throw new RockError(
61+
`Version ${version} not found for package ${packageName}`,
62+
);
63+
}
64+
return versionData;
65+
}
66+
4467
/**
4568
* Extracts a tarball to a temporary directory and returns the path to the extracted directory
4669
* @param tarballPath - Path to the tarball to extract

pnpm-lock.yaml

Lines changed: 0 additions & 106 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)