From 7cb0b630e1cae56670d94c91d28f7c0bfd3ff96e Mon Sep 17 00:00:00 2001 From: pafik13 Date: Sat, 14 Dec 2024 22:48:38 +0300 Subject: [PATCH 01/17] fear(util): add extractFromEnv --- src/core.ts | 46 +++++++++++++++++++++++++--------------------- src/util.ts | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 21 deletions(-) diff --git a/src/core.ts b/src/core.ts index ffefd1ffb2..08edb8e6a8 100644 --- a/src/core.ts +++ b/src/core.ts @@ -51,6 +51,7 @@ import { proxyOverride, quote, quotePowerShell, + extractFromEnv, } from './util.js' const CWD = Symbol('processCwd') @@ -97,27 +98,30 @@ export interface Options { halt?: boolean } // prettier-ignore -export const defaults: Options = { - [CWD]: process.cwd(), - [SYNC]: false, - verbose: false, - env: process.env, - sync: false, - shell: true, - stdio: 'pipe', - nothrow: false, - quiet: false, - prefix: '', - postfix: '', - detached: false, - preferLocal: false, - spawn, - spawnSync, - log, - kill, - killSignal: SIGTERM, - timeoutSignal: SIGTERM, -} +export const defaults: Options = Object.assign( + { + [CWD]: process.cwd(), + [SYNC]: false, + verbose: false, + env: process.env, + sync: false, + shell: true, + stdio: 'pipe', + nothrow: false, + quiet: false, + prefix: '', + postfix: '', + detached: false, + preferLocal: false, + spawn, + spawnSync, + log, + kill, + killSignal: SIGTERM, + timeoutSignal: SIGTERM, + }, + extractFromEnv>() +) // prettier-ignore export interface Shell< diff --git a/src/util.ts b/src/util.ts index 56b7ed4890..174528e810 100644 --- a/src/util.ts +++ b/src/util.ts @@ -462,3 +462,37 @@ export const proxyOverride = ( ) }, }) as T + +// https://stackoverflow.com/a/61375162 +const snakeToCamel = (str: string) => + str + .toLowerCase() + .replace(/([-_][a-z])/g, (group) => + group.toUpperCase().replace('-', '').replace('_', '') + ) + +export function extractFromEnv(prefix: string = 'ZX_') { + const result: Record = {} + for (const key in process.env) { + if (key.startsWith(prefix)) { + const propKey = snakeToCamel(key.substring(prefix.length)) + const value = process.env[key] + if (value) { + if (value.toLowerCase() === 'true') { + result[propKey] = true + continue + } + if (value.toLowerCase() === 'false') { + result[propKey] = false + continue + } + if (Number.isFinite(Number(value))) { + result[propKey] = Number(value) + continue + } + result[propKey] = value + } + } + } + return result as T +} From c22cd7bb37cbc1e280d6f1aa13836b4cdf326e67 Mon Sep 17 00:00:00 2001 From: pafik13 Date: Sat, 14 Dec 2024 22:48:57 +0300 Subject: [PATCH 02/17] chore(config): increase size limits --- .size-limit.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.size-limit.json b/.size-limit.json index 84dfaf9ddf..4a83b58d08 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -2,14 +2,14 @@ { "name": "zx/core", "path": ["build/core.cjs", "build/util.cjs", "build/vendor-core.cjs"], - "limit": "73 kB", + "limit": "74 kB", "brotli": false, "gzip": false }, { "name": "zx/index", "path": "build/*.{js,cjs}", - "limit": "800 kB", + "limit": "801 kB", "brotli": false, "gzip": false }, From 3589408486b65b5c904632e120b35a06a075c46f Mon Sep 17 00:00:00 2001 From: pafik13 Date: Sat, 14 Dec 2024 22:49:25 +0300 Subject: [PATCH 03/17] test(core): clean up env var some tests --- test/core.test.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/core.test.js b/test/core.test.js index 229f009004..7b9c9477ff 100644 --- a/test/core.test.js +++ b/test/core.test.js @@ -42,12 +42,14 @@ describe('core', () => { process.env.ZX_TEST_FOO = 'foo' const foo = await $`echo $ZX_TEST_FOO` assert.equal(foo.stdout, 'foo\n') + delete process.env.ZX_TEST_FOO }) test('env vars are safe to pass', async () => { process.env.ZX_TEST_BAR = 'hi; exit 1' const bar = await $`echo $ZX_TEST_BAR` assert.equal(bar.stdout, 'hi; exit 1\n') + delete process.env.ZX_TEST_BAR }) test('arguments are quoted', async () => { From 3dbeb8818fea1c04ea172676a1d3d0493db9ed41 Mon Sep 17 00:00:00 2001 From: pafik13 Date: Sat, 14 Dec 2024 22:49:40 +0300 Subject: [PATCH 04/17] test(util): cover extractFromEnv --- test/util.test.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/util.test.js b/test/util.test.js index 1176447634..e614210014 100644 --- a/test/util.test.js +++ b/test/util.test.js @@ -31,6 +31,7 @@ import { tempdir, tempfile, preferLocalBin, + extractFromEnv, } from '../build/util.js' describe('util', () => { @@ -191,3 +192,21 @@ test('preferLocalBin()', () => { `${process.cwd()}/node_modules/.bin:${process.cwd()}:${env.PATH}` ) }) + +test('extractFromEnv()', () => { + process.env.ZX_VERBOSE = 'true' + process.env.ZX_SHELL = '/some/custom/shell/path' + process.env.ZX_PREFER_LOCAL = 'false' + + const envVariables = extractFromEnv() + + assert.deepEqual(envVariables, { + verbose: true, + shell: process.env.ZX_SHELL, + preferLocal: false, + }) + + delete process.env.ZX_VERBOSE + delete process.env.ZX_SHELL + delete process.env.ZX_PREFER_LOCAL +}) From 808e065206f845f6be296ae18e53a86c7205eb38 Mon Sep 17 00:00:00 2001 From: pafik13 Date: Mon, 16 Dec 2024 16:57:06 +0300 Subject: [PATCH 05/17] feat(util): remove extractFromEnv and snakeToCamel, add camelToSnake --- src/util.ts | 37 +++++-------------------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/src/util.ts b/src/util.ts index 174528e810..17b73c6da7 100644 --- a/src/util.ts +++ b/src/util.ts @@ -463,36 +463,9 @@ export const proxyOverride = ( }, }) as T -// https://stackoverflow.com/a/61375162 -const snakeToCamel = (str: string) => +// https://stackoverflow.com/questions/7888238/javascript-split-string-on-uppercase-characters +export const camelToSnake = (str: string) => str - .toLowerCase() - .replace(/([-_][a-z])/g, (group) => - group.toUpperCase().replace('-', '').replace('_', '') - ) - -export function extractFromEnv(prefix: string = 'ZX_') { - const result: Record = {} - for (const key in process.env) { - if (key.startsWith(prefix)) { - const propKey = snakeToCamel(key.substring(prefix.length)) - const value = process.env[key] - if (value) { - if (value.toLowerCase() === 'true') { - result[propKey] = true - continue - } - if (value.toLowerCase() === 'false') { - result[propKey] = false - continue - } - if (Number.isFinite(Number(value))) { - result[propKey] = Number(value) - continue - } - result[propKey] = value - } - } - } - return result as T -} + .split(/(?=[A-Z])/) + .map((s) => s.toUpperCase()) + .join('_') From 2f5d75e19fb10ae5928720cd56b4633ecd20d076 Mon Sep 17 00:00:00 2001 From: pafik13 Date: Mon, 16 Dec 2024 16:57:21 +0300 Subject: [PATCH 06/17] feat(core): implement getZxDefaults --- src/core.ts | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/src/core.ts b/src/core.ts index 08edb8e6a8..62e49f2e68 100644 --- a/src/core.ts +++ b/src/core.ts @@ -51,7 +51,7 @@ import { proxyOverride, quote, quotePowerShell, - extractFromEnv, + camelToSnake, } from './util.js' const CWD = Symbol('processCwd') @@ -81,7 +81,7 @@ export interface Options { verbose: boolean sync: boolean env: NodeJS.ProcessEnv - shell: string | boolean + shell: string | true nothrow: boolean prefix: string postfix: string @@ -97,8 +97,40 @@ export interface Options { killSignal?: NodeJS.Signals halt?: boolean } + +export function getZxDefaults( + defs: Options, + extra: Partial = { + cwd: '', + halt: false, + preferLocal: '', + input: '', + }, + prefix: string = 'ZX_', + env = process.env +) { + const process = (opts: Partial) => { + const o: Record = {} + for (const [dk, dv] of Object.entries(opts)) { + const ek = prefix + camelToSnake(dk) + const ev = env[ek] + if (typeof ev !== 'undefined') { + const v = { true: true, false: false }[ev.toLowerCase()] ?? ev + if (typeof v === typeof dv) { + o[dk] = v + } + } + } + return o + } + const subset1 = process(defs) + const subset2 = process(extra) + + return Object.assign(defs, subset1, subset2) +} + // prettier-ignore -export const defaults: Options = Object.assign( +export const defaults: Options = getZxDefaults( { [CWD]: process.cwd(), [SYNC]: false, @@ -120,7 +152,6 @@ export const defaults: Options = Object.assign( killSignal: SIGTERM, timeoutSignal: SIGTERM, }, - extractFromEnv>() ) // prettier-ignore From d53cc00a6aafe6d8816d68254d8aa358259ee45a Mon Sep 17 00:00:00 2001 From: pafik13 Date: Mon, 16 Dec 2024 16:58:06 +0300 Subject: [PATCH 07/17] test: add tests for getZxDefaults and camelToSnake --- test/core.test.js | 38 +++++++++++++++++++++++++++++++++++++- test/util.test.js | 24 ++++++------------------ 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/test/core.test.js b/test/core.test.js index 7b9c9477ff..a8e6632891 100644 --- a/test/core.test.js +++ b/test/core.test.js @@ -19,10 +19,46 @@ import { basename } from 'node:path' import { WriteStream } from 'node:fs' import { Readable, Transform, Writable } from 'node:stream' import { Socket } from 'node:net' -import { ProcessPromise, ProcessOutput } from '../build/index.js' +import { ProcessPromise, ProcessOutput, getZxDefaults } from '../build/index.js' import '../build/globals.js' describe('core', () => { + describe('getZxDefaults', () => { + test('verbose rewrite', async () => { + const defaults = getZxDefaults({ verbose: false }, {}, 'ZX_', { + ZX_VERBOSE: 'true', + }) + assert.equal(defaults.verbose, true) + }) + test('verbose ignore', async () => { + const defaults = getZxDefaults({ verbose: false }, {}, 'ZX_', { + ZX_VERBOSE: 'true123', + }) + assert.equal(defaults.verbose, false) + }) + test('input in extra', async () => { + const defaults = getZxDefaults({}, { input: '' }, 'ZX_', { + ZX_INPUT: 'input', + }) + assert.equal(defaults.input, 'input') + }) + test('preferLocal rewrite boolean', async () => { + const defaults = getZxDefaults({ preferLocal: false }, {}, 'ZX_', { + ZX_PREFER_LOCAL: 'true', + }) + assert.equal(defaults.preferLocal, true) + }) + test('preferLocal rewrite string', async () => { + const defaults = getZxDefaults( + { preferLocal: false }, + { preferLocal: '' }, + 'ZX_', + { ZX_PREFER_LOCAL: 'true123' } + ) + assert.equal(defaults.preferLocal, 'true123') + }) + }) + describe('$', () => { test('is a regular function', async () => { const _$ = $.bind(null) diff --git a/test/util.test.js b/test/util.test.js index e614210014..9292967226 100644 --- a/test/util.test.js +++ b/test/util.test.js @@ -31,7 +31,7 @@ import { tempdir, tempfile, preferLocalBin, - extractFromEnv, + camelToSnake, } from '../build/util.js' describe('util', () => { @@ -192,21 +192,9 @@ test('preferLocalBin()', () => { `${process.cwd()}/node_modules/.bin:${process.cwd()}:${env.PATH}` ) }) - -test('extractFromEnv()', () => { - process.env.ZX_VERBOSE = 'true' - process.env.ZX_SHELL = '/some/custom/shell/path' - process.env.ZX_PREFER_LOCAL = 'false' - - const envVariables = extractFromEnv() - - assert.deepEqual(envVariables, { - verbose: true, - shell: process.env.ZX_SHELL, - preferLocal: false, - }) - - delete process.env.ZX_VERBOSE - delete process.env.ZX_SHELL - delete process.env.ZX_PREFER_LOCAL +test('camelToSnake()', () => { + assert.equal(camelToSnake('verbose'), 'VERBOSE') + assert.equal(camelToSnake('nothrow'), 'NOTHROW') + assert.equal(camelToSnake('preferLocal'), 'PREFER_LOCAL') + assert.equal(camelToSnake('someMoreBigStr'), 'SOME_MORE_BIG_STR') }) From c8c0597d17cff330b7f1be7e3c382b79ef747714 Mon Sep 17 00:00:00 2001 From: pafik13 Date: Mon, 16 Dec 2024 22:11:33 +0300 Subject: [PATCH 08/17] chore: up size limit --- .size-limit.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.size-limit.json b/.size-limit.json index 4a83b58d08..ead301a636 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -2,14 +2,14 @@ { "name": "zx/core", "path": ["build/core.cjs", "build/util.cjs", "build/vendor-core.cjs"], - "limit": "74 kB", + "limit": "75 kB", "brotli": false, "gzip": false }, { "name": "zx/index", "path": "build/*.{js,cjs}", - "limit": "801 kB", + "limit": "802 kB", "brotli": false, "gzip": false }, From 3e8a4d42108cd9716af7bfdc15d7e92f41fb6792 Mon Sep 17 00:00:00 2001 From: pafik13 Date: Mon, 16 Dec 2024 22:12:50 +0300 Subject: [PATCH 09/17] feat(util): add snakeToCamel --- src/util.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/util.ts b/src/util.ts index 2907dc619d..cc26c88e67 100644 --- a/src/util.ts +++ b/src/util.ts @@ -463,9 +463,17 @@ export const proxyOverride = ( }, }) as T -// https://stackoverflow.com/questions/7888238/javascript-split-string-on-uppercase-characters +// https://stackoverflow.com/a/7888303 export const camelToSnake = (str: string) => str .split(/(?=[A-Z])/) .map((s) => s.toUpperCase()) .join('_') + +// https://stackoverflow.com/a/61375162 +export const snakeToCamel = (str: string) => + str + .toLowerCase() + .replace(/([-_][a-z])/g, (group) => + group.toUpperCase().replace('-', '').replace('_', '') + ) From 6baa606797a618e94bda376f3e983acceeb72a02 Mon Sep 17 00:00:00 2001 From: pafik13 Date: Mon, 16 Dec 2024 22:12:56 +0300 Subject: [PATCH 10/17] refactor(core): remove extra param from getZxDefaults --- src/core.ts | 82 +++++++++++++++++++++++++++-------------------------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/src/core.ts b/src/core.ts index ee4f97e20c..3d29f4f4dd 100644 --- a/src/core.ts +++ b/src/core.ts @@ -52,7 +52,7 @@ import { proxyOverride, quote, quotePowerShell, - camelToSnake, + snakeToCamel, } from './util.js' const CWD = Symbol('processCwd') @@ -101,58 +101,60 @@ export interface Options { export function getZxDefaults( defs: Options, - extra: Partial = { - cwd: '', - halt: false, - preferLocal: '', - input: '', - }, prefix: string = 'ZX_', env = process.env ) { - const process = (opts: Partial) => { - const o: Record = {} - for (const [dk, dv] of Object.entries(opts)) { - const ek = prefix + camelToSnake(dk) - const ev = env[ek] - if (typeof ev !== 'undefined') { - const v = { true: true, false: false }[ev.toLowerCase()] ?? ev - if (typeof v === typeof dv) { - o[dk] = v + const types: Record> = { + cwd: ['string'], + shell: ['string', 'boolean'], + halt: ['boolean'], + preferLocal: ['string', 'boolean'], + input: ['string'], + } + + const o = Object.entries(env).reduce>( + (m, [k, v]) => { + if (k.startsWith(prefix) && v) { + const _k = snakeToCamel(k.slice(prefix.length)) + const _v = { true: true, false: false }[v.toLowerCase()] ?? v + if ( + [typeof defs[_k as keyof Options], ...(types[_k] ?? [])].includes( + typeof _v + ) + ) { + m[_k] = _v } } - } - return o - } - const subset1 = process(defs) - const subset2 = process(extra) - - return Object.assign(defs, subset1, subset2) + return m + }, + {} + ) + return Object.assign(defs, o) } -// prettier-ignore export const defaults: Options = getZxDefaults( + // prettier-ignore { - [CWD]: process.cwd(), - [SYNC]: false, - verbose: false, - env: process.env, - sync: false, - shell: true, - stdio: 'pipe', - nothrow: false, - quiet: false, - prefix: '', - postfix: '', - detached: false, - preferLocal: false, + [CWD]: process.cwd(), + [SYNC]: false, + verbose: false, + env: process.env, + sync: false, + shell: true, + stdio: 'pipe', + nothrow: false, + quiet: false, + prefix: '', + postfix: '', + detached: false, + preferLocal: false, spawn, spawnSync, log, kill, - killSignal: SIGTERM, - timeoutSignal: SIGTERM, - }, + killSignal: SIGTERM, + timeoutSignal: SIGTERM, + } ) // prettier-ignore From 8fb923a111bc0fb332f223052221fdb476f0db8d Mon Sep 17 00:00:00 2001 From: pafik13 Date: Mon, 16 Dec 2024 22:13:23 +0300 Subject: [PATCH 11/17] test(util): cover snakeToCamel --- test/util.test.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/util.test.js b/test/util.test.js index 9292967226..893e8cdf9b 100644 --- a/test/util.test.js +++ b/test/util.test.js @@ -32,6 +32,7 @@ import { tempfile, preferLocalBin, camelToSnake, + snakeToCamel, } from '../build/util.js' describe('util', () => { @@ -192,9 +193,17 @@ test('preferLocalBin()', () => { `${process.cwd()}/node_modules/.bin:${process.cwd()}:${env.PATH}` ) }) + test('camelToSnake()', () => { assert.equal(camelToSnake('verbose'), 'VERBOSE') assert.equal(camelToSnake('nothrow'), 'NOTHROW') assert.equal(camelToSnake('preferLocal'), 'PREFER_LOCAL') assert.equal(camelToSnake('someMoreBigStr'), 'SOME_MORE_BIG_STR') }) + +test('snakeToCamel()', () => { + assert.equal(snakeToCamel('VERBOSE'), 'verbose') + assert.equal(snakeToCamel('NOTHROW'), 'nothrow') + assert.equal(snakeToCamel('PREFER_LOCAL'), 'preferLocal') + assert.equal(snakeToCamel('SOME_MORE_BIG_STR'), 'someMoreBigStr') +}) From 655b7715df0ea91e57fcaa74dd0fa2345ec7bfbc Mon Sep 17 00:00:00 2001 From: pafik13 Date: Mon, 16 Dec 2024 22:14:46 +0300 Subject: [PATCH 12/17] test(core): actualize getZxDefaults --- test/core.test.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/test/core.test.js b/test/core.test.js index b1a436e493..7b487b28bc 100644 --- a/test/core.test.js +++ b/test/core.test.js @@ -25,36 +25,33 @@ import '../build/globals.js' describe('core', () => { describe('getZxDefaults', () => { test('verbose rewrite', async () => { - const defaults = getZxDefaults({ verbose: false }, {}, 'ZX_', { + const defaults = getZxDefaults({ verbose: false }, 'ZX_', { ZX_VERBOSE: 'true', }) assert.equal(defaults.verbose, true) }) test('verbose ignore', async () => { - const defaults = getZxDefaults({ verbose: false }, {}, 'ZX_', { + const defaults = getZxDefaults({ verbose: false }, 'ZX_', { ZX_VERBOSE: 'true123', }) assert.equal(defaults.verbose, false) }) test('input in extra', async () => { - const defaults = getZxDefaults({}, { input: '' }, 'ZX_', { + const defaults = getZxDefaults({}, 'ZX_', { ZX_INPUT: 'input', }) assert.equal(defaults.input, 'input') }) test('preferLocal rewrite boolean', async () => { - const defaults = getZxDefaults({ preferLocal: false }, {}, 'ZX_', { + const defaults = getZxDefaults({ preferLocal: false }, 'ZX_', { ZX_PREFER_LOCAL: 'true', }) assert.equal(defaults.preferLocal, true) }) test('preferLocal rewrite string', async () => { - const defaults = getZxDefaults( - { preferLocal: false }, - { preferLocal: '' }, - 'ZX_', - { ZX_PREFER_LOCAL: 'true123' } - ) + const defaults = getZxDefaults({ preferLocal: false }, 'ZX_', { + ZX_PREFER_LOCAL: 'true123', + }) assert.equal(defaults.preferLocal, 'true123') }) }) From 0b86a0b11b7119c359907b5bbc467442b5dd8f4f Mon Sep 17 00:00:00 2001 From: pafik13 Date: Tue, 17 Dec 2024 00:38:01 +0300 Subject: [PATCH 13/17] feat(core): extend types in getZxDefaults and use it as allowed list --- src/core.ts | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/core.ts b/src/core.ts index 3d29f4f4dd..ff5dd75e8a 100644 --- a/src/core.ts +++ b/src/core.ts @@ -105,23 +105,22 @@ export function getZxDefaults( env = process.env ) { const types: Record> = { - cwd: ['string'], - shell: ['string', 'boolean'], - halt: ['boolean'], preferLocal: ['string', 'boolean'], - input: ['string'], + detached: ['boolean'], + verbose: ['boolean'], + quiet: ['boolean'], + timeout: ['string'], + timeoutSignal: ['string'], + prefix: ['string'], + postfix: ['string'], } const o = Object.entries(env).reduce>( (m, [k, v]) => { - if (k.startsWith(prefix) && v) { + if (v && k.startsWith(prefix)) { const _k = snakeToCamel(k.slice(prefix.length)) const _v = { true: true, false: false }[v.toLowerCase()] ?? v - if ( - [typeof defs[_k as keyof Options], ...(types[_k] ?? [])].includes( - typeof _v - ) - ) { + if (_k in types && types[_k].some((type) => type === typeof _v)) { m[_k] = _v } } @@ -132,9 +131,8 @@ export function getZxDefaults( return Object.assign(defs, o) } -export const defaults: Options = getZxDefaults( - // prettier-ignore - { +// prettier-ignore +export const defaults: Options = getZxDefaults({ [CWD]: process.cwd(), [SYNC]: false, verbose: false, @@ -154,8 +152,7 @@ export const defaults: Options = getZxDefaults( kill, killSignal: SIGTERM, timeoutSignal: SIGTERM, - } -) +}) // prettier-ignore export interface Shell< From 15e2770210efe22b88f698705882348a80ca228a Mon Sep 17 00:00:00 2001 From: pafik13 Date: Tue, 17 Dec 2024 00:38:57 +0300 Subject: [PATCH 14/17] test(core): update suites --- test/core.test.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/core.test.js b/test/core.test.js index 7b487b28bc..a7ed3b6baa 100644 --- a/test/core.test.js +++ b/test/core.test.js @@ -30,24 +30,28 @@ describe('core', () => { }) assert.equal(defaults.verbose, true) }) + test('verbose ignore', async () => { const defaults = getZxDefaults({ verbose: false }, 'ZX_', { ZX_VERBOSE: 'true123', }) assert.equal(defaults.verbose, false) }) - test('input in extra', async () => { + + test('input ignored', async () => { const defaults = getZxDefaults({}, 'ZX_', { ZX_INPUT: 'input', }) - assert.equal(defaults.input, 'input') + assert.equal(defaults.input, undefined) }) + test('preferLocal rewrite boolean', async () => { const defaults = getZxDefaults({ preferLocal: false }, 'ZX_', { ZX_PREFER_LOCAL: 'true', }) assert.equal(defaults.preferLocal, true) }) + test('preferLocal rewrite string', async () => { const defaults = getZxDefaults({ preferLocal: false }, 'ZX_', { ZX_PREFER_LOCAL: 'true123', From a4bd346a3a374a71fa283e5f740c84638fa29183 Mon Sep 17 00:00:00 2001 From: pafik13 Date: Tue, 17 Dec 2024 00:42:19 +0300 Subject: [PATCH 15/17] chore(core): swap getZxDefaults definition and usage for better git blame --- src/core.ts | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/core.ts b/src/core.ts index ff5dd75e8a..57a6514b7b 100644 --- a/src/core.ts +++ b/src/core.ts @@ -99,6 +99,29 @@ export interface Options { halt?: boolean } +// prettier-ignore +export const defaults: Options = getZxDefaults({ + [CWD]: process.cwd(), + [SYNC]: false, + verbose: false, + env: process.env, + sync: false, + shell: true, + stdio: 'pipe', + nothrow: false, + quiet: false, + prefix: '', + postfix: '', + detached: false, + preferLocal: false, + spawn, + spawnSync, + log, + kill, + killSignal: SIGTERM, + timeoutSignal: SIGTERM, +}) + export function getZxDefaults( defs: Options, prefix: string = 'ZX_', @@ -131,29 +154,6 @@ export function getZxDefaults( return Object.assign(defs, o) } -// prettier-ignore -export const defaults: Options = getZxDefaults({ - [CWD]: process.cwd(), - [SYNC]: false, - verbose: false, - env: process.env, - sync: false, - shell: true, - stdio: 'pipe', - nothrow: false, - quiet: false, - prefix: '', - postfix: '', - detached: false, - preferLocal: false, - spawn, - spawnSync, - log, - kill, - killSignal: SIGTERM, - timeoutSignal: SIGTERM, -}) - // prettier-ignore export interface Shell< S = false, From fdfb0b65c080c656a8f030cf13747a32f9499444 Mon Sep 17 00:00:00 2001 From: pafik13 Date: Tue, 17 Dec 2024 00:43:47 +0300 Subject: [PATCH 16/17] chore(core): remove one tab for defaults --- src/core.ts | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/core.ts b/src/core.ts index 57a6514b7b..68d2e34b7a 100644 --- a/src/core.ts +++ b/src/core.ts @@ -101,25 +101,25 @@ export interface Options { // prettier-ignore export const defaults: Options = getZxDefaults({ - [CWD]: process.cwd(), - [SYNC]: false, - verbose: false, - env: process.env, - sync: false, - shell: true, - stdio: 'pipe', - nothrow: false, - quiet: false, - prefix: '', - postfix: '', - detached: false, - preferLocal: false, - spawn, - spawnSync, - log, - kill, - killSignal: SIGTERM, - timeoutSignal: SIGTERM, + [CWD]: process.cwd(), + [SYNC]: false, + verbose: false, + env: process.env, + sync: false, + shell: true, + stdio: 'pipe', + nothrow: false, + quiet: false, + prefix: '', + postfix: '', + detached: false, + preferLocal: false, + spawn, + spawnSync, + log, + kill, + killSignal: SIGTERM, + timeoutSignal: SIGTERM, }) export function getZxDefaults( From c05c48710cfb79aba69512855dd4e860447b9a1d Mon Sep 17 00:00:00 2001 From: Anton Golub Date: Tue, 17 Dec 2024 17:19:06 +0300 Subject: [PATCH 17/17] chore: update .size-limit.json --- .size-limit.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.size-limit.json b/.size-limit.json index 3d6b4ff92d..1be91f16d0 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -2,14 +2,14 @@ { "name": "zx/core", "path": ["build/core.cjs", "build/util.cjs", "build/vendor-core.cjs"], - "limit": "75 kB", + "limit": "76 kB", "brotli": false, "gzip": false }, { "name": "zx/index", "path": "build/*.{js,cjs}", - "limit": "802 kB", + "limit": "803 kB", "brotli": false, "gzip": false },