diff --git a/.changeset/brave-tires-poke.md b/.changeset/brave-tires-poke.md new file mode 100644 index 000000000..f9739b6d4 --- /dev/null +++ b/.changeset/brave-tires-poke.md @@ -0,0 +1,5 @@ +--- +'create-rock': patch +--- + +perf: drop package-json dep diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 87014f9d3..c5414c630 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -24,7 +24,6 @@ "@rock-js/tools": "^0.10.2", "gradient-string": "^3.0.0", "minimist": "^1.2.8", - "package-json": "^10.0.1", "tar": "^7.4.3", "tslib": "^2.3.0" }, diff --git a/packages/create-app/src/lib/utils/tarball.ts b/packages/create-app/src/lib/utils/tarball.ts index f83d15fca..2ae8bafa8 100644 --- a/packages/create-app/src/lib/utils/tarball.ts +++ b/packages/create-app/src/lib/utils/tarball.ts @@ -1,7 +1,6 @@ import fs from 'node:fs'; import path from 'node:path'; import { RockError } from '@rock-js/tools'; -import packageJson from 'package-json'; import * as tar from 'tar'; import { getNameWithoutExtension } from './fs.js'; @@ -11,17 +10,17 @@ export async function downloadTarballFromNpm( targetDir: string, ) { try { - const metadata = await packageJson(packageName, { version }); + const versionData = await getPackageVersionData(packageName, version); - const tarballUrl = metadata['dist']?.tarball; + const tarballUrl = versionData.dist?.tarball; if (!tarballUrl) { throw new RockError('Tarball URL not found.'); } - const response = await fetch(tarballUrl); - if (!response.ok) { + const tarballResponse = await fetch(tarballUrl); + if (!tarballResponse.ok) { throw new RockError( - `Failed to fetch package ${packageName}: ${response.statusText}`, + `Failed to fetch package ${packageName}: ${tarballResponse.statusText}`, ); } @@ -30,7 +29,7 @@ export async function downloadTarballFromNpm( `${packageName.replace('/', '-')}.tgz`, ); // Write the tarball to disk - const arrayBuffer = await response.arrayBuffer(); + const arrayBuffer = await tarballResponse.arrayBuffer(); fs.writeFileSync(tarballPath, new Uint8Array(arrayBuffer)); return tarballPath; @@ -41,6 +40,30 @@ export async function downloadTarballFromNpm( } } +async function getPackageVersionData(packageName: string, version: string) { + // Fetch package metadata from npm registry + const registryUrl = `https://registry.npmjs.org/${packageName}`; + const response = await fetch(registryUrl); + + if (!response.ok) { + throw new RockError( + `Failed to fetch package metadata for ${packageName}: ${response.statusText}`, + ); + } + + const metadata = await response.json(); + const versionTag = metadata['dist-tags']?.[version]; + const versionData = versionTag + ? metadata.versions?.[versionTag] + : metadata.versions?.[version]; + if (!versionData) { + throw new RockError( + `Version ${version} not found for package ${packageName}`, + ); + } + return versionData; +} + /** * Extracts a tarball to a temporary directory and returns the path to the extracted directory * @param tarballPath - Path to the tarball to extract diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 461c5aea5..ea9320c4d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -137,9 +137,6 @@ importers: minimist: specifier: ^1.2.8 version: 1.2.8 - package-json: - specifier: ^10.0.1 - version: 10.0.1 tar: specifier: ^7.4.3 version: 7.4.3 @@ -1641,18 +1638,6 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pnpm/config.env-replace@1.1.0': - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} - - '@pnpm/network.ca-file@1.0.2': - resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} - engines: {node: '>=12.22.0'} - - '@pnpm/npm-conf@2.3.1': - resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} - engines: {node: '>=12'} - '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -3315,9 +3300,6 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - connect@3.7.0: resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} engines: {node: '>= 0.10.0'} @@ -3442,10 +3424,6 @@ packages: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -4027,9 +4005,6 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -4221,9 +4196,6 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} @@ -4553,10 +4525,6 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - ky@1.7.2: - resolution: {integrity: sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==} - engines: {node: '>=18'} - launch-editor@2.11.1: resolution: {integrity: sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==} @@ -5266,10 +5234,6 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-json@10.0.1: - resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} - engines: {node: '>=18'} - package-manager-detector@0.2.11: resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} @@ -5464,9 +5428,6 @@ packages: property-information@7.0.0: resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} - proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -5512,10 +5473,6 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - react-devtools-core@6.1.5: resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==} @@ -5627,14 +5584,6 @@ packages: resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} engines: {node: '>=4'} - registry-auth-token@5.0.2: - resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} - engines: {node: '>=14'} - - registry-url@6.0.1: - resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} - engines: {node: '>=12'} - regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} @@ -6159,10 +6108,6 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -8720,18 +8665,6 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pnpm/config.env-replace@1.1.0': {} - - '@pnpm/network.ca-file@1.0.2': - dependencies: - graceful-fs: 4.2.10 - - '@pnpm/npm-conf@2.3.1': - dependencies: - '@pnpm/config.env-replace': 1.1.0 - '@pnpm/network.ca-file': 1.0.2 - config-chain: 1.1.13 - '@polka/url@1.0.0-next.29': {} '@react-native-community/cli-config-android@20.0.1': @@ -10845,11 +10778,6 @@ snapshots: concat-map@0.0.1: {} - config-chain@1.1.13: - dependencies: - ini: 1.3.8 - proto-list: 1.2.4 - connect@3.7.0: dependencies: debug: 2.6.9 @@ -10955,8 +10883,6 @@ snapshots: deep-eql@5.0.2: {} - deep-extend@0.6.0: {} - deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -11644,8 +11570,6 @@ snapshots: gopd@1.2.0: {} - graceful-fs@4.2.10: {} - graceful-fs@4.2.11: {} gradient-string@2.0.2: @@ -11948,8 +11872,6 @@ snapshots: inherits@2.0.4: {} - ini@1.3.8: {} - inline-style-parser@0.2.4: {} invariant@2.2.4: @@ -12278,8 +12200,6 @@ snapshots: kleur@4.1.5: {} - ky@1.7.2: {} - launch-editor@2.11.1: dependencies: picocolors: 1.1.1 @@ -13409,13 +13329,6 @@ snapshots: package-json-from-dist@1.0.1: {} - package-json@10.0.1: - dependencies: - ky: 1.7.2 - registry-auth-token: 5.0.2 - registry-url: 6.0.1 - semver: 7.6.3 - package-manager-detector@0.2.11: dependencies: quansync: 0.2.10 @@ -13613,8 +13526,6 @@ snapshots: property-information@7.0.0: {} - proto-list@1.2.4: {} - proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -13664,13 +13575,6 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - react-devtools-core@6.1.5: dependencies: shell-quote: 1.8.3 @@ -13852,14 +13756,6 @@ snapshots: unicode-match-property-value-ecmascript: 2.2.0 optional: true - registry-auth-token@5.0.2: - dependencies: - '@pnpm/npm-conf': 2.3.1 - - registry-url@6.0.1: - dependencies: - rc: 1.2.8 - regjsgen@0.8.0: optional: true @@ -14485,8 +14381,6 @@ snapshots: strip-final-newline@2.0.0: {} - strip-json-comments@2.0.1: {} - strip-json-comments@3.1.1: {} strip-literal@3.0.0: