amalgm 0.1.131 → 0.1.132
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cli.js +2 -0
- package/lib/service.js +28 -1
- package/lib/supervisor.js +2 -0
- package/package.json +1 -1
package/lib/cli.js
CHANGED
|
@@ -229,6 +229,7 @@ const SAFE_DAEMON_ENV_KEYS = [
|
|
|
229
229
|
'LC_ALL',
|
|
230
230
|
'LOGNAME',
|
|
231
231
|
'NODE_PATH',
|
|
232
|
+
'NPM_CONFIG_PREFIX',
|
|
232
233
|
'PATH',
|
|
233
234
|
'PORT_MONITOR_PORT',
|
|
234
235
|
'SHELL',
|
|
@@ -241,6 +242,7 @@ const SAFE_DAEMON_ENV_KEYS = [
|
|
|
241
242
|
'XDG_CACHE_HOME',
|
|
242
243
|
'XDG_CONFIG_HOME',
|
|
243
244
|
'XDG_DATA_HOME',
|
|
245
|
+
'npm_config_prefix',
|
|
244
246
|
];
|
|
245
247
|
|
|
246
248
|
function daemonEnv(localOnly) {
|
package/lib/service.js
CHANGED
|
@@ -65,6 +65,7 @@ const SERVICE_ENV_KEYS = [
|
|
|
65
65
|
'LANG',
|
|
66
66
|
'LC_ALL',
|
|
67
67
|
'NODE_PATH',
|
|
68
|
+
'NPM_CONFIG_PREFIX',
|
|
68
69
|
'PATH',
|
|
69
70
|
'PORT_MONITOR_PORT',
|
|
70
71
|
'SHELL',
|
|
@@ -75,6 +76,7 @@ const SERVICE_ENV_KEYS = [
|
|
|
75
76
|
'XDG_CACHE_HOME',
|
|
76
77
|
'XDG_CONFIG_HOME',
|
|
77
78
|
'XDG_DATA_HOME',
|
|
79
|
+
'npm_config_prefix',
|
|
78
80
|
];
|
|
79
81
|
|
|
80
82
|
function ensureDir(dir, mode = 0o700) {
|
|
@@ -143,6 +145,27 @@ function systemdQuote(value) {
|
|
|
143
145
|
return `"${String(value).replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
144
146
|
}
|
|
145
147
|
|
|
148
|
+
function pathLooksLikeDesktopBundle(value) {
|
|
149
|
+
return /(?:^|\/)[^/]+\.app\/Contents\/(?:Resources\/cli|MacOS)(?:\/|$)/.test(String(value || '').replace(/\\/g, '/'));
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function serviceStateCanOwnRuntime(state) {
|
|
153
|
+
if (!state) return false;
|
|
154
|
+
const pointsAtDesktopBundle = [
|
|
155
|
+
state.package_root,
|
|
156
|
+
state.node,
|
|
157
|
+
state.bin,
|
|
158
|
+
state.files?.plist,
|
|
159
|
+
state.files?.unit,
|
|
160
|
+
state.files?.script,
|
|
161
|
+
state.files?.nodeScript,
|
|
162
|
+
].some(pathLooksLikeDesktopBundle);
|
|
163
|
+
if (pointsAtDesktopBundle) return false;
|
|
164
|
+
if (state.runtime_host === 'node') return true;
|
|
165
|
+
if (state.runtime_host === 'electron') return false;
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
|
|
146
169
|
function isPidRunning(pid) {
|
|
147
170
|
if (!Number.isInteger(pid) || pid <= 0) return false;
|
|
148
171
|
try {
|
|
@@ -283,7 +306,6 @@ function buildServiceEnv(localOnly) {
|
|
|
283
306
|
AMALGM_LOCAL_ONLY: localOnly ? 'true' : 'false',
|
|
284
307
|
AMALGM_SERVICE_MANAGED: 'true',
|
|
285
308
|
AMALGM_SERVICE_LABEL: SERVICE_LABEL,
|
|
286
|
-
ELECTRON_RUN_AS_NODE: process.env.ELECTRON_RUN_AS_NODE || '1',
|
|
287
309
|
PATH: process.env.PATH || '/usr/local/bin:/usr/bin:/bin',
|
|
288
310
|
};
|
|
289
311
|
|
|
@@ -656,6 +678,7 @@ function serviceStateFor(backend, localOnly, files = {}) {
|
|
|
656
678
|
package_root: PACKAGE_ROOT,
|
|
657
679
|
node: process.execPath,
|
|
658
680
|
bin: AMALGM_BIN,
|
|
681
|
+
runtime_host: process.versions.electron ? 'electron' : 'node',
|
|
659
682
|
files,
|
|
660
683
|
updated_at: new Date().toISOString(),
|
|
661
684
|
};
|
|
@@ -710,6 +733,7 @@ function stateMatchesRequest(state, options = {}) {
|
|
|
710
733
|
// Explicit `amalgm service install` still takes over via installService().
|
|
711
734
|
function deferToExistingInstall(state, options = {}) {
|
|
712
735
|
if (!state || !state.backend || !state.bin || !state.package_version) return false;
|
|
736
|
+
if (!serviceStateCanOwnRuntime(state)) return false;
|
|
713
737
|
if (state.package_root === PACKAGE_ROOT) return false;
|
|
714
738
|
if (!!state.local_only !== !!options.localOnly) return false;
|
|
715
739
|
const requested = normalizeMode(options.mode || 'auto');
|
|
@@ -941,7 +965,10 @@ module.exports = {
|
|
|
941
965
|
SERVICE_PID_FILE,
|
|
942
966
|
clearPortableServiceStateForDeadPid,
|
|
943
967
|
lockOwnedByAnother,
|
|
968
|
+
pathLooksLikeDesktopBundle,
|
|
944
969
|
portableLockDir,
|
|
970
|
+
serviceStateCanOwnRuntime,
|
|
971
|
+
writeLaunchdPlist,
|
|
945
972
|
writePortableNodeScript,
|
|
946
973
|
writeSystemdUnit,
|
|
947
974
|
},
|
package/lib/supervisor.js
CHANGED
|
@@ -186,6 +186,7 @@ const SAFE_PROCESS_ENV_KEYS = [
|
|
|
186
186
|
'ELECTRON_RUN_AS_NODE',
|
|
187
187
|
'PATH',
|
|
188
188
|
'NODE_PATH',
|
|
189
|
+
'NPM_CONFIG_PREFIX',
|
|
189
190
|
'SHELL',
|
|
190
191
|
'SSH_AUTH_SOCK',
|
|
191
192
|
'TERM',
|
|
@@ -196,6 +197,7 @@ const SAFE_PROCESS_ENV_KEYS = [
|
|
|
196
197
|
'XDG_CACHE_HOME',
|
|
197
198
|
'XDG_CONFIG_HOME',
|
|
198
199
|
'XDG_DATA_HOME',
|
|
200
|
+
'npm_config_prefix',
|
|
199
201
|
];
|
|
200
202
|
|
|
201
203
|
function safeBaseProcessEnv() {
|