Sha256: 9d076d83c67bd1d193fed3365a69ad88deaadec83ede3dfa84c06b158d8d12c6

Contents?: true

Size: 1020 Bytes

Versions: 2

Compression:

Stored size: 1020 Bytes

Contents

# frozen_string_literal: true

require "json"
require "open3"
require "pathname"

module CobraCommander
  module Dependencies
    # Yarn workspace components source for an umbrella
    class Yarn
      PACKAGE_FILE = "package.json"

      autoload :Package, "cobra_commander/dependencies/yarn/package"

      def initialize(root_path)
        @root_path = Pathname.new(root_path)
      end

      def root
        @root ||= Package.new(
          path: @root_path.join(PACKAGE_FILE).realpath,
          dependencies: packages.map(&:name)
        )
      end

      def packages
        @packages ||= begin
          output, = Open3.capture2("yarn workspaces --json info", chdir: @root_path.to_s)
          JSON.parse(JSON.parse(output)["data"]).map do |name, spec|
            Package.new(
              path: @root_path.join(spec["location"], PACKAGE_FILE).realpath,
              dependencies: spec["workspaceDependencies"],
              name: name
            )
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cobra_commander-0.15.1 lib/cobra_commander/dependencies/yarn.rb
cobra_commander-0.15.0 lib/cobra_commander/dependencies/yarn.rb