#!/usr/bin/env perl =pod I'm slightly fed up with `package.json`, because: * the keys are ordering alphabetically, not logically. * no comments. * friggin' no trailing comma. And the quotes, my lord, the bloody quotes... Hence this script, which takes a `package.yaml`, and convert it to `package.json`. Sections, like `dependencies`, `devDependencies' and 'version' that we want to preserve can be given `_merge`. All data structures under the keys given in `_merge` will have their `yaml` and `json` values merged, with the `json` having priority. By default `package.json` will be updated (like, that's the point isn't?). For a dry run pass in a `-n` argument. =cut use 5.24.0; use strict; use warnings; use File::Serialize; use Hash::Merge qw/ merge /; use feature qw/ postderef /; use YAML::XS; use Path::Tiny; use JSON::PP qw//; use JSON qw/ to_json /; { no warnings; $YAML::XS::Boolean = 'JSON::PP'; } my $yaml = deserialize_file 'package.yml'; my $json = deserialize_file 'package.json'; my $mergers = delete $yaml->{_merge}; my $result = merge( { $json->%{@$mergers} }, $yaml ); my $encoder = JSON->new->pretty->canonical->space_before(0); $json = $encoder->encode($result); $json =~ s/(^|\G) / /g; if( grep { $_ eq '-n' } @ARGV ) { print $json; } else { path('package.json')->spew($json); say "regenerated package.json" }