handle multiple package versions in registry.json

This commit is contained in:
EatThePooh 2025-10-06 14:57:47 +07:00
parent 26f60eb96b
commit 1029dd91ed

View file

@ -81,19 +81,6 @@ in
mkdir -p $OUT_PATH
tar -xzf $src -C $OUT_PATH --strip-components=1
SUBSET_FILTER='to_entries | map(select(.key == "version" or .key == "bin" or .key == "dependencies" or .key == "peerDependencies")) | from_entries'
PACKAGE_SUBSET=$(${pkgs.jq}/bin/jq "$SUBSET_FILTER" $OUT_PATH/package.json)
cat > $OUT_PATH/../registry.json <<EOF
{
"name": "${name}",
"dist-tags": {},
"versions": {
"${version}": $PACKAGE_SUBSET
}
}
EOF
runHook postInstall
'';
@ -109,11 +96,32 @@ in
inherit pkgs lockfile registryHostname;
})
lockfiles;
in
pkgs.symlinkJoin {
name = "deno-shared-cache";
baseCache = pkgs.symlinkJoin {
name = "deno-shared-cache-base";
paths = allNpmDeps;
};
in
pkgs.runCommand "deno-shared-cache" {} ''
cp -r ${baseCache} $out
chmod -R +w $out
# Generate registry.json for each package by scanning versions
find $out/npm/${registryHostname} -mindepth 1 -maxdepth 1 -type d | while read -r pkg_dir; do
pkg_name=$(basename "$pkg_dir")
versions_json=$(${pkgs.jq}/bin/jq -n '{}')
find "$pkg_dir" -mindepth 1 -maxdepth 1 -type d | while read -r version_dir; do
if [ -f "$version_dir/package.json" ]; then
version=$(basename "$version_dir")
subset=$(${pkgs.jq}/bin/jq 'to_entries | map(select(.key == "version" or .key == "bin" or .key == "dependencies" or .key == "peerDependencies")) | from_entries' "$version_dir/package.json")
versions_json=$(echo "$versions_json" | ${pkgs.jq}/bin/jq --arg v "$version" --argjson data "$subset" '.[$v] = $data')
fi
done
${pkgs.jq}/bin/jq -n --arg name "$pkg_name" --argjson versions "$versions_json" '{name: $name, "dist-tags": {}, versions: $versions}' > "$pkg_dir/registry.json"
done
'';
denoWithCache = { pkgs, baseDeno, sharedCache }:
pkgs.writeShellScriptBin "deno" ''