From 4188dcb0fbc0339d3a6edf9cd001571c3933922b Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 18 Jan 2024 15:17:57 -0800 Subject: [PATCH] fix(pack): default foreground-scripts to true Fixes #6816 --- lib/commands/pack.js | 5 +++ .../test/lib/commands/pack.js.test.cjs | 21 ++++++++++ test/lib/commands/pack.js | 42 +++++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/lib/commands/pack.js b/lib/commands/pack.js index 74e80e573c2e9..0346623da40de 100644 --- a/lib/commands/pack.js +++ b/lib/commands/pack.js @@ -21,6 +21,11 @@ class Pack extends BaseCommand { static workspaces = true static ignoreImplicitWorkspace = false + constructor (...args) { + super(...args) + this.npm.config.set('foreground-scripts', true, 'default') + } + async exec (args) { if (args.length === 0) { args = ['.'] diff --git a/tap-snapshots/test/lib/commands/pack.js.test.cjs b/tap-snapshots/test/lib/commands/pack.js.test.cjs index 2e4fdf499a93e..57a90c919ff20 100644 --- a/tap-snapshots/test/lib/commands/pack.js.test.cjs +++ b/tap-snapshots/test/lib/commands/pack.js.test.cjs @@ -26,6 +26,27 @@ Array [ ] ` +exports[`test/lib/commands/pack.js TAP foreground-scripts defaults to true > logs pack contents 1`] = ` +Array [ + undefined, + "package: test-fg-scripts@0.0.0", + undefined, + "110B package.json", + undefined, + String( + name: test-fg-scripts + version: 0.0.0 + filename: test-fg-scripts-0.0.0.tgz + package size: {size} + unpacked size: 110 B + shasum: {sha} + integrity: {integrity} + total files: 1 + ), + "", +] +` + exports[`test/lib/commands/pack.js TAP should log output as valid json > logs pack contents 1`] = ` Array [] ` diff --git a/test/lib/commands/pack.js b/test/lib/commands/pack.js index 658fd3489abea..6fb6ca9e1954b 100644 --- a/test/lib/commands/pack.js +++ b/test/lib/commands/pack.js @@ -105,6 +105,48 @@ t.test('dry run', async t => { t.throws(() => fs.statSync(path.resolve(npm.prefix, filename))) }) +t.test('foreground-scripts defaults to true', async t => { + const { npm, outputs, logs } = await loadMockNpm(t, { + prefixDir: { + 'package.json': JSON.stringify({ + name: 'test-fg-scripts', + version: '0.0.0', + scripts: { + prepack: 'echo prepack!', + postpack: 'echo postpack!', + }, + } + ), + }, + config: { 'dry-run': true }, + }) + + /* eslint no-console: 0 */ + // TODO: replace this with `const results = t.intercept(console, 'log')` + const log = console.log + t.teardown(() => { + console.log = log + }) + const caughtLogs = [] + console.log = (...args) => { + caughtLogs.push(args) + } + // end TODO + + await npm.exec('pack', []) + const filename = 'test-fg-scripts-0.0.0.tgz' + t.same( + caughtLogs, + [ + ['\n> test-fg-scripts@0.0.0 prepack\n> echo prepack!\n'], + ['\n> test-fg-scripts@0.0.0 postpack\n> echo postpack!\n'], + ], + 'prepack and postpack log to stdout') + t.strictSame(outputs, [[filename]]) + t.matchSnapshot(logs.notice.map(([, m]) => m), 'logs pack contents') + t.throws(() => fs.statSync(path.resolve(npm.prefix, filename))) +}) + t.test('invalid packument', async t => { const { npm, outputs } = await loadMockNpm(t, { prefixDir: {