Module: Lively::Electron::Packager

Defined in:
lib/lively/electron/packager.rb,
lib/lively/electron/packager/npm.rb,
lib/lively/electron/packager/pnpm.rb,
lib/lively/electron/packager/generic.rb

Defined Under Namespace

Classes: Generic, NotFoundError, Npm, Pnpm

Constant Summary collapse

ENV_KEY =
"LIVELY_ELECTRON_PACKAGER"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#Environment variable for explicitly selecting `npm` or `pnpm`.(variable) ⇒ Object (readonly)



19
# File 'lib/lively/electron/packager.rb', line 19

ENV_KEY = "LIVELY_ELECTRON_PACKAGER"

Class Method Details

.detect(package_root, environment = ::ENV) ⇒ Object

Picks a packager for a project root.

Resolution order:

  1. ‘LIVELY_ELECTRON_PACKAGER` env var with value `npm` or `pnpm` (case-insensitive);

  2. ‘package.json` `packageManager` field (e.g. `pnpm@10.0.0` or `npm@10.0.0`);

  3. a lone lock file (‘pnpm-lock.yaml` or `package-lock.json`);

  4. if both lock files are present, ‘pnpm` (matches this gem’s default);

  5. if there is no clear signal, ‘pnpm`.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/lively/electron/packager.rb', line 35

def detect(package_root, environment = ::ENV)
	root = File.expand_path(package_root)
	
	if (resolved = from_environment(environment[ENV_KEY]))
		return resolved
	end
	
	if (resolved = from_package_json(root))
		return resolved
	end
	
	has_pnpm = File.file?(File.join(root, "pnpm-lock.yaml"))
	has_npm = File.file?(File.join(root, "package-lock.json"))
	
	if has_pnpm && has_npm
		return Pnpm.new
	elsif has_pnpm
		return Pnpm.new
	elsif has_npm
		return Npm.new
	else
		return Pnpm.new
	end
end

.resolve_electron_executable(packager, search_roots, environment = ::ENV) ⇒ Object

Calls Lively::Electron::Packager::Generic#electron_executable_path for each of ‘search_roots` in order (e.g. the app’s working directory, then the gem root in development). The first concrete path wins. If no root yields a local binary, falls back to the bare program name ‘“electron”` for the OS to find on `PATH`.



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/lively/electron/packager.rb', line 65

def resolve_electron_executable(packager, search_roots, environment = ::ENV)
	search_roots
		.compact
		.map {|path| File.expand_path(path)}
		.uniq
		.each do |search_root|
			begin
				return packager.electron_executable_path(search_root, environment)
			rescue NotFoundError
				next
			end
		end
	
	# No local binary found in any root; rely on the OS to find `electron` on PATH:
	"electron"
end