Commit d3774b2

Anton Golub <antongolub@antongolub.com>
2025-07-15 15:23:17
chore: bytes shrinking (#1270)
* chore: bytes shrinking * test: update tests
1 parent afcb0eb
build/cli.js
build/core.cjs
@@ -380,6 +380,7 @@ function formatCmd(cmd) {
 }
 
 // src/core.ts
+var child_process = __toESM(require("child_process"), 1);
 var import_node_path = __toESM(require("path"), 1);
 var os = __toESM(require("os"), 1);
 var import_vendor_core3 = require("./vendor-core.cjs");
@@ -1011,14 +1012,7 @@ function cd(dir) {
 function kill(_0) {
   return __async(this, arguments, function* (pid, signal = $.killSignal) {
     if (import_node_process2.default.platform === "win32" && (yield new Promise((resolve) => {
-      (0, import_vendor_core2.exec)({
-        cmd: `taskkill /pid ${pid} /t /f`,
-        on: {
-          end({ error }) {
-            resolve(!error);
-          }
-        }
-      });
+      child_process.exec(`taskkill /pid ${pid} /t /f`, (err) => resolve(!err));
     })))
       return;
     for (const p of yield import_vendor_core2.ps.tree({ pid, recursive: true })) {
build/core.d.ts
@@ -13,7 +13,7 @@ export { default as path } from 'node:path';
 export * as os from 'node:os';
 export { log, type LogEntry } from './log.js';
 export { chalk, which, ps } from './vendor-core.js';
-export { quote, quotePowerShell } from './util.js';
+export { type Duration, quote, quotePowerShell } from './util.js';
 declare const CWD: unique symbol;
 declare const SYNC: unique symbol;
 export declare function within<R>(callback: () => R): R;
build/goods.d.ts
@@ -1,7 +1,12 @@
+import { Buffer } from 'node:buffer';
 import { Readable } from 'node:stream';
+import { type Mode } from 'node:fs';
 import { type ProcessPromise } from './core.js';
 import { type Duration } from './util.js';
 import { type RequestInfo, type RequestInit, minimist } from './vendor.js';
+export declare function tempdir(prefix?: string, mode?: Mode): string;
+export declare function tempfile(name?: string, data?: string | Buffer, mode?: Mode): string;
+export { tempdir as tmpdir, tempfile as tmpfile };
 type ArgvOpts = minimist.Opts & {
     camelCase?: boolean;
     parseBoolean?: boolean;
@@ -28,4 +33,3 @@ export declare function retry<T>(count: number, duration: Duration | Generator<n
 export declare function expBackoff(max?: Duration, delay?: Duration): Generator<number, void, unknown>;
 export declare function spinner<T>(callback: () => T): Promise<T>;
 export declare function spinner<T>(title: string, callback: () => T): Promise<T>;
-export {};
build/index.cjs
@@ -34,16 +34,14 @@ __export(index_exports, {
   parseArgv: () => parseArgv,
   question: () => question,
   quiet: () => quiet,
-  quote: () => import_util2.quote,
-  quotePowerShell: () => import_util2.quotePowerShell,
   retry: () => retry,
   sleep: () => sleep,
   spinner: () => spinner,
   stdin: () => stdin,
-  tempdir: () => import_util2.tempdir,
-  tempfile: () => import_util2.tempfile,
-  tmpdir: () => import_util2.tempdir,
-  tmpfile: () => import_util2.tempfile,
+  tempdir: () => tempdir,
+  tempfile: () => tempfile,
+  tmpdir: () => tempdir,
+  tmpfile: () => tempfile,
   updateArgv: () => updateArgv,
   version: () => version
 });
@@ -56,9 +54,23 @@ var import_node_buffer = require("buffer");
 var import_node_process = __toESM(require("process"), 1);
 var import_node_readline = require("readline");
 var import_node_stream = require("stream");
+var import_node_fs = __toESM(require("fs"), 1);
+var import_node_path = __toESM(require("path"), 1);
+var import_node_os = __toESM(require("os"), 1);
 var import_core = require("./core.cjs");
 var import_util = require("./util.cjs");
 var import_vendor = require("./vendor.cjs");
+function tempdir(prefix = `zx-${(0, import_util.randomId)()}`, mode) {
+  const dirpath = import_node_path.default.join(import_node_os.default.tmpdir(), prefix);
+  import_node_fs.default.mkdirSync(dirpath, { recursive: true, mode });
+  return dirpath;
+}
+function tempfile(name, data, mode) {
+  const filepath = name ? import_node_path.default.join(tempdir(), name) : import_node_path.default.join(import_node_os.default.tmpdir(), `zx-${(0, import_util.randomId)()}`);
+  if (data === void 0) import_node_fs.default.closeSync(import_node_fs.default.openSync(filepath, "w", mode));
+  else import_node_fs.default.writeFileSync(filepath, data, { mode });
+  return filepath;
+}
 var parseArgv = (args = import_node_process.default.argv.slice(2), opts = {}, defs = {}) => Object.entries((0, import_vendor.minimist)(args, opts)).reduce(
   (m, [k, v]) => {
     const kTrans = opts.camelCase ? import_util.toCamelCase : import_util.identity;
@@ -236,7 +248,6 @@ function spinner(title, callback) {
 
 // src/index.ts
 var import_vendor3 = require("./vendor.cjs");
-var import_util2 = require("./util.cjs");
 var import_meta = {};
 var _a;
 var VERSION = ((_a = import_vendor2.fs.readJsonSync(new URL("../package.json", import_meta_url), {
@@ -267,8 +278,6 @@ function quiet(promise) {
   parseArgv,
   question,
   quiet,
-  quote,
-  quotePowerShell,
   retry,
   sleep,
   spinner,
build/index.d.ts
@@ -7,7 +7,6 @@ export * from './goods.js';
 export { minimist, dotenv, fs, YAML, glob, glob as globby } from './vendor.js';
 export declare const VERSION: string;
 export declare const version: string;
-export { type Duration, quote, quotePowerShell, tempdir, tempdir as tmpdir, tempfile, tempfile as tmpfile, } from './util.js';
 /**
  *  @deprecated Use $`cmd`.nothrow() instead.
  */
build/index.js
@@ -17,8 +17,6 @@ const {
   parseArgv,
   question,
   quiet,
-  quote,
-  quotePowerShell,
   retry,
   sleep,
   spinner,
@@ -40,6 +38,8 @@ const {
   os,
   path,
   ps,
+  quote,
+  quotePowerShell,
   resolveDefaults,
   syncProcessCwd,
   useBash,
@@ -64,8 +64,6 @@ export {
   parseArgv,
   question,
   quiet,
-  quote,
-  quotePowerShell,
   retry,
   sleep,
   spinner,
@@ -87,6 +85,8 @@ export {
   os,
   path,
   ps,
+  quote,
+  quotePowerShell,
   resolveDefaults,
   syncProcessCwd,
   useBash,
build/util.cjs
@@ -27,27 +27,12 @@ __export(util_exports, {
   quote: () => quote,
   quotePowerShell: () => quotePowerShell,
   randomId: () => randomId,
-  tempdir: () => tempdir,
-  tempfile: () => tempfile,
   toCamelCase: () => toCamelCase
 });
 module.exports = __toCommonJS(util_exports);
-var import_node_os = __toESM(require("os"), 1);
 var import_node_path = __toESM(require("path"), 1);
-var import_node_fs = __toESM(require("fs"), 1);
 var import_node_process = __toESM(require("process"), 1);
 var import_vendor_core = require("./vendor-core.cjs");
-function tempdir(prefix = `zx-${randomId()}`, mode) {
-  const dirpath = import_node_path.default.join(import_node_os.default.tmpdir(), prefix);
-  import_node_fs.default.mkdirSync(dirpath, { recursive: true, mode });
-  return dirpath;
-}
-function tempfile(name, data, mode) {
-  const filepath = name ? import_node_path.default.join(tempdir(), name) : import_node_path.default.join(import_node_os.default.tmpdir(), `zx-${randomId()}`);
-  if (data === void 0) import_node_fs.default.closeSync(import_node_fs.default.openSync(filepath, "w", mode));
-  else import_node_fs.default.writeFileSync(filepath, data, { mode });
-  return filepath;
-}
 function noop() {
 }
 function identity(v) {
@@ -135,7 +120,5 @@ var getLines = (chunk, next, delimiter) => {
   quote,
   quotePowerShell,
   randomId,
-  tempdir,
-  tempfile,
   toCamelCase
 });
\ No newline at end of file
build/util.d.ts
@@ -1,9 +1,6 @@
-import { type Mode } from 'node:fs';
 import { type Buffer } from 'node:buffer';
 import { type TSpawnStoreChunks } from './vendor-core.js';
 export { isStringLiteral } from './vendor-core.js';
-export declare function tempdir(prefix?: string, mode?: Mode): string;
-export declare function tempfile(name?: string, data?: string | Buffer, mode?: Mode): string;
 export declare function noop(): void;
 export declare function identity<T>(v: T): T;
 export declare function randomId(): string;
src/core.ts
@@ -70,7 +70,7 @@ export { default as path } from 'node:path'
 export * as os from 'node:os'
 export { log, type LogEntry } from './log.ts'
 export { chalk, which, ps } from './vendor-core.ts'
-export { quote, quotePowerShell } from './util.ts'
+export { type Duration, quote, quotePowerShell } from './util.ts'
 
 const CWD = Symbol('processCwd')
 const SYNC = Symbol('syncExec')
src/goods.ts
@@ -16,6 +16,9 @@ import { Buffer } from 'node:buffer'
 import process from 'node:process'
 import { createInterface } from 'node:readline'
 import { Readable } from 'node:stream'
+import fs, { type Mode } from 'node:fs'
+import path from 'node:path'
+import os from 'node:os'
 import { $, within, ProcessOutput, type ProcessPromise } from './core.ts'
 import {
   type Duration,
@@ -24,6 +27,7 @@ import {
   isStringLiteral,
   parseBool,
   parseDuration,
+  randomId,
   toCamelCase,
 } from './util.ts'
 import {
@@ -33,6 +37,33 @@ import {
   minimist,
 } from './vendor.ts'
 
+export function tempdir(
+  prefix: string = `zx-${randomId()}`,
+  mode?: Mode
+): string {
+  const dirpath = path.join(os.tmpdir(), prefix)
+  fs.mkdirSync(dirpath, { recursive: true, mode })
+
+  return dirpath
+}
+
+export function tempfile(
+  name?: string,
+  data?: string | Buffer,
+  mode?: Mode
+): string {
+  const filepath = name
+    ? path.join(tempdir(), name)
+    : path.join(os.tmpdir(), `zx-${randomId()}`)
+
+  if (data === undefined) fs.closeSync(fs.openSync(filepath, 'w', mode))
+  else fs.writeFileSync(filepath, data, { mode })
+
+  return filepath
+}
+
+export { tempdir as tmpdir, tempfile as tmpfile }
+
 type ArgvOpts = minimist.Opts & { camelCase?: boolean; parseBoolean?: boolean }
 
 export const parseArgv = (
src/index.ts
@@ -26,16 +26,6 @@ export const VERSION: string =
 
 export const version: string = VERSION
 
-export {
-  type Duration,
-  quote,
-  quotePowerShell,
-  tempdir,
-  tempdir as tmpdir,
-  tempfile,
-  tempfile as tmpfile,
-} from './util.ts'
-
 /**
  *  @deprecated Use $`cmd`.nothrow() instead.
  */
src/util.ts
@@ -12,40 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-import os from 'node:os'
 import path from 'node:path'
-import fs, { type Mode } from 'node:fs'
 import { type Buffer } from 'node:buffer'
 import process from 'node:process'
 import { type TSpawnStoreChunks } from './vendor-core.ts'
 
 export { isStringLiteral } from './vendor-core.ts'
 
-export function tempdir(
-  prefix: string = `zx-${randomId()}`,
-  mode?: Mode
-): string {
-  const dirpath = path.join(os.tmpdir(), prefix)
-  fs.mkdirSync(dirpath, { recursive: true, mode })
-
-  return dirpath
-}
-
-export function tempfile(
-  name?: string,
-  data?: string | Buffer,
-  mode?: Mode
-): string {
-  const filepath = name
-    ? path.join(tempdir(), name)
-    : path.join(os.tmpdir(), `zx-${randomId()}`)
-
-  if (data === undefined) fs.closeSync(fs.openSync(filepath, 'w', mode))
-  else fs.writeFileSync(filepath, data, { mode })
-
-  return filepath
-}
-
 export function noop() {}
 
 export function identity<T>(v: T): T {
test/goods.test.ts
@@ -15,7 +15,7 @@
 import assert from 'node:assert'
 import { test, describe, after } from 'node:test'
 import { Duplex } from 'node:stream'
-import { $, chalk, fs, path, tempfile, dotenv } from '../src/index.ts'
+import { $, chalk, fs, path, dotenv } from '../src/index.ts'
 import {
   echo,
   sleep,
@@ -28,6 +28,10 @@ import {
   retry,
   question,
   expBackoff,
+  tempfile,
+  tempdir,
+  tmpdir,
+  tmpfile,
 } from '../src/goods.ts'
 import { Writable } from 'node:stream'
 import process from 'node:process'
@@ -442,4 +446,22 @@ ENV5=v5 # comment
       })
     })
   })
+
+  describe('temp*', () => {
+    test('tempdir() creates temporary folders', () => {
+      assert.equal(tmpdir, tempdir)
+      assert.match(tempdir(), /\/zx-/)
+      assert.match(tempdir('foo'), /\/foo$/)
+    })
+
+    test('tempfile() creates temporary files', () => {
+      assert.equal(tmpfile, tempfile)
+      assert.match(tempfile(), /\/zx-.+/)
+      assert.match(tempfile('foo.txt'), /\/zx-.+\/foo\.txt$/)
+
+      const tf = tempfile('bar.txt', 'bar')
+      assert.match(tf, /\/zx-.+\/bar\.txt$/)
+      assert.equal(fs.readFileSync(tf, 'utf-8'), 'bar')
+    })
+  })
 })
test/util.test.js
@@ -13,7 +13,6 @@
 // limitations under the License.
 
 import assert from 'node:assert'
-import fs from 'node:fs'
 import { test, describe } from 'node:test'
 import {
   isString,
@@ -25,8 +24,6 @@ import {
   quotePowerShell,
   randomId,
   // normalizeMultilinePieces,
-  tempdir,
-  tempfile,
   preferLocalBin,
   toCamelCase,
   getLast,
@@ -91,20 +88,6 @@ describe('util', () => {
   //   )
   // })
 
-  test('tempdir() creates temporary folders', () => {
-    assert.match(tempdir(), /\/zx-/)
-    assert.match(tempdir('foo'), /\/foo$/)
-  })
-
-  test('tempfile() creates temporary files', () => {
-    assert.match(tempfile(), /\/zx-.+/)
-    assert.match(tempfile('foo.txt'), /\/zx-.+\/foo\.txt$/)
-
-    const tf = tempfile('bar.txt', 'bar')
-    assert.match(tf, /\/zx-.+\/bar\.txt$/)
-    assert.equal(fs.readFileSync(tf, 'utf-8'), 'bar')
-  })
-
   test('preferLocalBin()', () => {
     const env = {
       PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin',
.size-limit.json
@@ -29,7 +29,7 @@
       "build/globals.js",
       "build/deno.js"
     ],
-    "limit": "813.70 kB",
+    "limit": "813.45 kB",
     "brotli": false,
     "gzip": false
   },
@@ -62,7 +62,7 @@
       "README.md",
       "LICENSE"
     ],
-    "limit": "869.70 kB",
+    "limit": "869.40 kB",
     "brotli": false,
     "gzip": false
   }