defmodule NPM.Install.LockfileBuilder do
@moduledoc """
Builds `npm.lock` entries from resolved package versions.
"""
@doc "Build lockfile entries from a resolved `%{name => version}` map."
@spec build(map(), (String.t(), String.t(), map() -> term())) :: NPM.Lockfile.t()
def build(resolved, on_package \\ fn _name, _version, _info -> :ok end) do
for {name, version_str} <- resolved, into: %{} do
{:ok, packument} = NPM.Registry.get_packument(name)
info = Map.fetch!(packument.versions, version_str)
on_package.(name, version_str, info)
{name,
%{
version: version_str,
integrity: info.dist.integrity,
tarball: info.dist.tarball,
dependencies: info.dependencies,
optional_dependencies: info.optional_dependencies,
has_install_script: info.has_install_script
}}
end
end
end