Skip to content

Commit efbeac7

Browse files
committed
DEPRECATE: move env/logger/main code to @dr-js/core
1 parent 4b459cf commit efbeac7

10 files changed

+91
-171
lines changed

SPEC.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
+ 📄 [source/babel.js](source/babel.js)
99
- `getBabelConfig`, `getWebpackBabelConfig`
1010
+ 📄 [source/ci.js](source/ci.js)
11-
- `commonInfoPatchCombo`
11+
- `commonInfoPatchCombo`, `runInfoPatchCombo`
1212
+ 📄 [source/docker.js](source/docker.js)
1313
- `checkImageExist`, `checkLocalImage`, `checkPullImage`, `compose`, `composeSync`, `docker`, `dockerSync`, `dockerWithTee`, `getContainerLsList`, `getContainerPsList`, `matchContainerLsList`, `matchContainerPsList`, `patchContainerLsListStartedAt`, `pullImage`, `runDocker`, `runDockerWithTee`
1414
+ 📄 [source/fileProcessor.js](source/fileProcessor.js)
1515
- `fileProcessorBabel`, `fileProcessorWebpack`, `processFileList`
1616
+ 📄 [source/license.js](source/license.js)
1717
- `writeLicenseFile`
1818
+ 📄 [source/main.js](source/main.js)
19-
- `argvFlag`, `commonCombo`, `commonInfoPatchCombo`, `existsSync`, `readFileSync`, `resolve`, `runMain`, `sep`, `writeFileSync`
19+
- `argvFlag`, `commonCombo`, `commonInfoPatchCombo`, `existsSync`, `readFileSync`, `resolve`, `runInfoPatchCombo`, `runMain`, `sep`, `writeFileSync`
2020
+ 📄 [source/minify.js](source/minify.js)
2121
- `getTerserOption`, `minifyFileListWithTerser`, `minifyFileWithTerser`
2222
+ 📄 [source/output.js](source/output.js)

script/packResource.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import { readJSON, writeText } from '@dr-js/core/module/node/fs/File.js'
44
import { resetDirectory } from '@dr-js/core/module/node/fs/Directory.js'
55
import { modifyCopy } from '@dr-js/core/module/node/fs/Modify.js'
66
import { writePackageJSON } from '@dr-js/core/module/node/module/PackageJSON.js'
7+
import { getKitLogger } from '@dr-js/core/module/node/kit.js'
78

8-
import { getLogger } from 'source/node/logger.js'
99
import { packOutput, publishOutput } from 'source/output.js'
1010
import { getFromPackExport, writePackExportInitJSON } from 'source-bin/function.js'
1111

@@ -65,7 +65,7 @@ const doPackResource = async ({
6565
configJSONFile, pathOutput,
6666
outputName, outputVersion, outputDescription,
6767
isPublish = false, isPublishDev = false, isDryRun = false,
68-
logger = getLogger('pack')
68+
logger = getKitLogger({ title: 'pack' })
6969
}) => {
7070
const { packageJSON, exportPairList } = await loadConfig({ configJSONFile, logger })
7171
if (outputName) packageJSON.name = outputName

source/ci.js

+22-16
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,38 @@ import { getPathNpm } from '@dr-js/core/module/node/module/Software/npm.js'
77

88
import { commonCombo } from './output.js'
99

10+
const runInfoPatchCombo = ({ RUN, padLog, log }) => {
11+
padLog('Log info')
12+
log(`system: ${process.platform}-${release()}[${arch()}]`)
13+
log(`node: ${process.version}`)
14+
log(`npm: ${require(resolve(getPathNpm(), './package.json')).version}`)
15+
log(`with: ${[ '@dr-js/core', '@dr-js/dev' ].map((v) => `${v}@${require(`${v}/package.json`).version}`).join(', ')}`)
16+
17+
if (process.platform === 'win32') {
18+
padLog('Patch git') // fix win32 CI cause `something to commit` test error: https://github.com/actions/checkout/issues/135#issuecomment-602171132
19+
RUN('git config core.autocrlf false')
20+
RUN('git config core.eol lf')
21+
RUN('git rm --cached -r .') // reset Git index, `rm .git/index` also work, check: https://stackoverflow.com/questions/5787937/git-status-shows-files-as-changed-even-though-contents-are-the-same/41041699#41041699
22+
RUN('git reset --hard')
23+
}
24+
}
25+
1026
// NOTE: test local ci-patch with command like:
1127
// DRY_RUN=1 npx dr-js-dev-*.tgz -eI .github/ci-patch.js
1228

13-
const commonInfoPatchCombo = (logger, initConfig) => {
29+
const commonInfoPatchCombo = (logger, initConfig) => { // TODO: DEPRECATE
1430
const { config, RUN, ...extra } = commonCombo(logger, initConfig)
1531

1632
// patch config
1733
config.IS_WIN32 = process.platform === 'win32' // TODO: DEPRECATE
1834
config.COMMAND_SUDO_NPM = config.IS_WIN32 ? 'npm.cmd' : 'sudo npm' // win32 has no sudo & need .cmd extension // TODO: DEPRECATE
19-
20-
logger.padLog('Log info')
21-
logger.log(`system: ${process.platform}-${release()}[${arch()}]`)
22-
logger.log(`node: ${process.version}`)
23-
logger.log(`npm: ${require(resolve(getPathNpm(), './package.json')).version}`)
24-
logger.log(`with: ${[ '@dr-js/core', '@dr-js/dev' ].map((v) => `${v}@${require(`${v}/package.json`).version}`).join(', ')}`)
2535
logger.log(`config:\n${prettyStringifyConfigObject(config, ' ', ' ')}`)
26-
27-
if (process.platform === 'win32') {
28-
logger.padLog('Patch git') // fix win32 CI cause `something to commit` test error: https://github.com/actions/checkout/issues/135#issuecomment-602171132
29-
RUN('git config core.autocrlf false')
30-
RUN('git config core.eol lf')
31-
RUN('git rm --cached -r .') // reset Git index, `rm .git/index` also work, check: https://stackoverflow.com/questions/5787937/git-status-shows-files-as-changed-even-though-contents-are-the-same/41041699#41041699
32-
RUN('git reset --hard')
33-
}
36+
runInfoPatchCombo({ ...logger, RUN })
3437

3538
return { config, RUN, ...extra }
3639
}
3740

38-
export { commonInfoPatchCombo }
41+
export {
42+
runInfoPatchCombo,
43+
commonInfoPatchCombo // TODO: DEPRECATE
44+
}

source/ci.test.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import { getLogger } from 'source/node/logger.js'
2-
import { commonInfoPatchCombo } from './ci.js'
1+
import { getKit } from '@dr-js/core/module/node/kit.js'
2+
import { runInfoPatchCombo } from './ci.js'
33

44
const { describe, it, info = console.log } = globalThis
55

66
describe('CI', () => {
7-
it('commonInfoPatchCombo()', async () => {
8-
process.env.DRY_RUN = true
9-
const result = commonInfoPatchCombo(getLogger('test-ci', false, 32, info))
10-
delete process.env.DRY_RUN
11-
__DEV__ && console.log(result)
7+
it('runInfoPatchCombo()', async () => {
8+
runInfoPatchCombo(getKit({
9+
title: 'test-ci', isQuiet: false, padWidth: 32, logFunc: info,
10+
isDryrun: true
11+
}))
1212
})
1313
})

source/main.js

+14-26
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,25 @@
11
import { resolve, sep } from 'path'
22
import { readFileSync, writeFileSync, existsSync } from 'fs'
3-
4-
import { clock } from '@dr-js/core/module/common/time.js'
5-
import { time } from '@dr-js/core/module/common/format.js'
63
import { isString } from '@dr-js/core/module/common/check.js'
7-
8-
import { argvFlag } from './node/env.js'
9-
import { getLogger } from './node/logger.js'
10-
import { commonCombo } from './output.js'
11-
import { commonInfoPatchCombo } from './ci.js'
4+
import { getKit, runKit } from '@dr-js/core/module/node/kit.js'
125

136
const runMain = (
147
mainAsyncFunc,
15-
loggerOrTitle = process.argv.slice(2).join('+'),
8+
kitLoggerOrTitle = process.argv.slice(2).join('+'),
169
...args
17-
) => {
18-
const startTime = clock()
19-
const logger = isString(loggerOrTitle)
20-
? getLogger(loggerOrTitle, argvFlag('quiet'))
21-
: loggerOrTitle
22-
new Promise((resolve) => resolve(mainAsyncFunc(logger, ...args))).then(
23-
() => { logger.padLog(`done in ${time(clock() - startTime)}`) },
24-
(error) => {
25-
console.warn(error)
26-
logger.padLog(`error after ${time(clock() - startTime)}: ${error}`)
27-
process.exit(-1)
28-
}
29-
)
30-
}
10+
) => runKit(
11+
(kit) => mainAsyncFunc(kit, ...args),
12+
isString(kitLoggerOrTitle)
13+
? { title: kitLoggerOrTitle }
14+
: { kit: { ...getKit(), ...kitLoggerOrTitle } }
15+
)
3116

3217
export {
33-
runMain,
18+
runMain, // TODO: DEPRECATE
3419
// quick import // TODO: DEPRECATE: move to `combo.js`
35-
argvFlag, commonCombo, commonInfoPatchCombo,
36-
resolve, sep, readFileSync, writeFileSync, existsSync
20+
resolve, sep, readFileSync, writeFileSync, existsSync // TODO: DEPRECATE
3721
}
22+
23+
export { commonCombo } from './output.js' // TODO: DEPRECATE
24+
export { runInfoPatchCombo, commonInfoPatchCombo } from './ci.js' // TODO: DEPRECATE
25+
export { argvFlag } from '@dr-js/core/module/node/kit.js' // TODO: DEPRECATE

source/node/env.js

+7-23
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,15 @@
1-
const loadEnvKey = (key) => {
2-
try {
3-
return JSON.parse(process.env[ key ])
4-
} catch (error) { return null }
5-
}
6-
const saveEnvKey = (key, value) => {
7-
try {
8-
process.env[ key ] = JSON.stringify(value)
9-
} catch (error) {}
10-
}
11-
const syncEnvKey = (key, defaultValue) => {
12-
const value = loadEnvKey(key) || defaultValue
13-
saveEnvKey(key, value)
14-
return value
15-
}
1+
import { syncEnvKey } from '@dr-js/core/module/node/kit.js'
162

173
const __VERBOSE__ = syncEnvKey('__DEV_VERBOSE__', process.argv.includes('verbose'))
184

195
const checkFlag = (flagList, checkFlagList) => flagList.find((flag) => checkFlagList.includes(flag))
206

21-
const argvFlag = (...checkFlagList) => checkFlag(process.argv, checkFlagList)
22-
237
export {
24-
loadEnvKey,
25-
saveEnvKey,
26-
syncEnvKey,
27-
288
__VERBOSE__,
29-
checkFlag,
30-
argvFlag
9+
checkFlag
3110
}
11+
12+
export {
13+
loadEnvKey, saveEnvKey, syncEnvKey, // TODO: DEPRECATE
14+
argvFlag // TODO: DEPRECATE
15+
} from '@dr-js/core/module/node/kit.js'

source/node/logger.js

+12-47
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,15 @@
1-
import { clock } from '@dr-js/core/module/common/time.js'
2-
import { time } from '@dr-js/core/module/common/format.js'
3-
import { clamp } from '@dr-js/core/module/common/math/base.js'
1+
import { getKitLogger } from '@dr-js/core/module/node/kit.js'
42

5-
import { configureTerminalColor } from '@dr-js/core/module/node/module/TerminalColor.js'
6-
7-
import { loadEnvKey, saveEnvKey, __VERBOSE__ } from './env.js'
8-
9-
const EMPTY_FUNC = () => {}
10-
11-
const TerminalColor = configureTerminalColor()
12-
const getLogger = (
3+
const getLogger = ( // TODO: DEPRECATE: confuse with `node/module/Logger.js` from `@dr-js/core`, use `kit` or `kitLogger`
134
title = 'dev',
145
quiet = false,
15-
padWidth = clamp((process.stdout.isTTY && process.stdout.columns) || 80, 64, 240),
16-
logFunc = console.log
17-
) => {
18-
const envTitle = loadEnvKey('__DEV_LOGGER_TITLE__')
19-
title = envTitle ? `${title}|${envTitle}` : title
20-
saveEnvKey('__DEV_LOGGER_TITLE__', title)
21-
22-
const startTime = clock()
23-
let prevTime = clock()
24-
const getPadTime = () => {
25-
const currentTime = clock()
26-
prevTime = currentTime
27-
return time(currentTime - startTime)
28-
}
29-
const getStepTime = () => {
30-
const currentTime = clock()
31-
const stepTime = currentTime - prevTime
32-
prevTime = currentTime
33-
return time(stepTime)
34-
}
35-
36-
const padLog = (...args) => {
37-
const start = `## ${args.join(' ')} `
38-
const end = ` [${title}|${getPadTime()}]`
39-
logFunc(`\n${start.padEnd(padWidth - end.length, '-')}${TerminalColor.fg.yellow(end)}`)
40-
}
41-
const stepLog = (...args) => logFunc(`- ${TerminalColor.fg.yellow(`(+${getStepTime()})`)} ${args.join(' ')}`)
42-
const log = (...args) => logFunc(TerminalColor.fg.darkGray(`- ${args.join(' ')}`))
43-
const devLog = __VERBOSE__ ? log : EMPTY_FUNC
44-
45-
return quiet
46-
? { padLog: stepLog, stepLog: devLog, log: devLog, devLog: EMPTY_FUNC }
47-
: { padLog, stepLog, log, devLog }
48-
}
49-
50-
export { getLogger }
6+
padWidth,
7+
logFunc
8+
) => getKitLogger({
9+
title,
10+
isQuiet: quiet,
11+
padWidth,
12+
logFunc
13+
})
14+
15+
export { getLogger } // TODO: DEPRECATE: confuse with `node/module/Logger.js` from `@dr-js/core`, use `kit` or `kitLogger`

source/output.js

+16-37
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,34 @@
11
import { ok } from 'assert'
2-
import { resolve } from 'path'
3-
import { homedir, tmpdir } from 'os'
42
import { statSync, readFileSync, writeFileSync } from 'fs'
53
import { binary } from '@dr-js/core/module/common/format.js'
64
import { isBasicObject } from '@dr-js/core/module/common/check.js'
75
import { getFirstBinPath } from '@dr-js/core/module/common/module/PackageJSON.js'
86
import { getFileList, resetDirectory } from '@dr-js/core/module/node/fs/Directory.js'
97
import { modifyCopy, modifyRename, modifyDelete } from '@dr-js/core/module/node/fs/Modify.js'
10-
import { resolveCommand } from '@dr-js/core/module/node/system/ResolveCommand.js'
11-
import { runSync, runStdout, runDetached } from '@dr-js/core/module/node/run.js'
8+
import { runStdout } from '@dr-js/core/module/node/run.js'
9+
import { argvFlag, getKitPathCombo, getKitRun } from '@dr-js/core/module/node/kit.js'
1210

13-
import { findUpPackageRoot, toPackageTgzName, runNpm } from '@dr-js/core/module/node/module/Software/npm.js'
11+
import { toPackageTgzName, runNpm } from '@dr-js/core/module/node/module/Software/npm.js'
1412
import { runGitStdout, runGitStdoutSync } from '@dr-js/core/module/node/module/Software/git.js'
1513

16-
import { __VERBOSE__, argvFlag } from './node/env.js'
14+
import { __VERBOSE__ } from './node/env.js'
1715
import { FILTER_TEST_PATH } from './node/preset.js'
1816
import { getFileListFromPathList } from './node/file.js'
1917
import { writeLicenseFile } from './license.js'
2018

21-
const fromPathCombo = ({
22-
PATH_ROOT = findUpPackageRoot(process.cwd()),
23-
PATH_OUTPUT = 'output-gitignore/', // relative
24-
PATH_TEMP = '.temp-gitignore/', // relative
25-
PATH_HOME = homedir(),
26-
PATH_OSTEMP = tmpdir()
27-
} = {}) => {
28-
// allow use relative path from PATH_ROOT
29-
PATH_OUTPUT = resolve(PATH_ROOT, PATH_OUTPUT)
30-
PATH_TEMP = resolve(PATH_ROOT, PATH_TEMP)
31-
PATH_HOME = resolve(PATH_ROOT, PATH_HOME)
32-
PATH_OSTEMP = resolve(PATH_ROOT, PATH_OSTEMP)
33-
return {
34-
PATH_ROOT, fromRoot: (...args) => resolve(PATH_ROOT, ...args),
35-
PATH_OUTPUT, fromOutput: (...args) => resolve(PATH_OUTPUT, ...args),
36-
PATH_TEMP, fromTemp: (...args) => resolve(PATH_TEMP, ...args),
37-
PATH_HOME, fromHome: (...args) => resolve(PATH_HOME, ...args),
38-
PATH_OSTEMP, fromOsTemp: (...args) => resolve(PATH_OSTEMP, ...args)
39-
}
40-
}
41-
42-
const commonCombo = (
19+
const commonCombo = ( // TODO: DEPRECATE
4320
logger,
4421
config = {
4522
DRY_RUN: Boolean(process.env.DRY_RUN),
4623
QUIET_RUN: argvFlag('quiet') || Boolean(process.env.QUIET_RUN)
4724
}
4825
) => {
49-
const pathConfig = fromPathCombo(config)
50-
const RUN = (argListOrString, optionOrIsDetached) => { // TODO: DEPRECATE: move `isDetached` in to option object
51-
const { isDetached = false, ...option } = isBasicObject(optionOrIsDetached) ? optionOrIsDetached : { isDetached: Boolean(optionOrIsDetached) }
52-
const argList = Array.isArray(argListOrString) ? [ ...argListOrString ] : argListOrString.split(' ').filter(Boolean) // prepend `'bash', '-c'` to run in bash shell
53-
argList[ 0 ] = resolveCommand(argList[ 0 ], pathConfig.PATH_ROOT) // mostly for finding `npm.cmd` on win32
54-
if (config.DRY_RUN) !config.QUIET_RUN && logger.log(`[${config.DRY_RUN ? 'RUN|DRY' : isDetached ? 'RUN|DETACHED' : 'RUN'}] "${argList.join(' ')}"`)
55-
else return (isDetached ? runDetached : runSync)(argList, { cwd: pathConfig.PATH_ROOT, stdio: config.QUIET_RUN ? [ 'ignore', 'ignore', 'inherit' ] : 'inherit', ...option })
56-
}
26+
const pathConfig = getKitPathCombo(config)
27+
const kitRun = getKitRun({ ...config, ...pathConfig, log: logger.log, isQuiet: config.QUIET_RUN, isDryRun: config.DRY_RUN })
28+
const RUN = (argListOrString, optionOrIsDetached) => kitRun.RUN( // TODO: DEPRECATE: move `isDetached` in to option object
29+
argListOrString,
30+
isBasicObject(optionOrIsDetached) ? optionOrIsDetached : { isDetached: Boolean(optionOrIsDetached) }
31+
)
5732
return { config, ...pathConfig, RUN }
5833
}
5934

@@ -213,11 +188,15 @@ const REGEXP_PUBLISH_VERSION = /^\d+\.\d+\.\d+$/ // 0.0.0
213188
const REGEXP_PUBLISH_VERSION_DEV = /^\d+\.\d+\.\d+-dev\.\d+$/ // 0.0.0-dev.0
214189

215190
export {
216-
fromPathCombo, commonCombo,
191+
commonCombo,
217192
initOutput,
218193
packOutput,
219194
clearOutput,
220195
verifyOutputBin,
221196
verifyNoGitignore, verifyGitStatusClean,
222197
publishOutput, getPublishFlag, verifyPublishVersion, REGEXP_PUBLISH_VERSION, REGEXP_PUBLISH_VERSION_DEV
223198
}
199+
200+
export {
201+
getKitPathCombo as fromPathCombo // TODO: DEPRECATE
202+
} from '@dr-js/core/module/node/kit.js'

source/output.test.js

+7-10
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,15 @@ import { stringifyEqual, doThrow, doNotThrow, doThrowAsync, doNotThrowAsync } fr
66
import { STAT_ERROR, getPathLstat } from '@dr-js/core/module/node/fs/Path.js'
77
import { resetDirectory } from '@dr-js/core/module/node/fs/Directory.js'
88
import { modifyDelete } from '@dr-js/core/module/node/fs/Modify.js'
9+
import { getKitLogger } from '@dr-js/core/module/node/kit.js'
910

1011
import {
11-
fromPathCombo,
1212
initOutput,
1313
packOutput,
1414
// verifyOutputBin,
1515
verifyNoGitignore,
1616
publishOutput, getPublishFlag, verifyPublishVersion
1717
} from './output.js'
18-
import { getLogger } from './node/logger.js'
1918

2019
const { describe, it, before, after, info = console.log } = globalThis
2120

@@ -30,20 +29,18 @@ describe('Output', () => {
3029
const fromTestRoot = (...args) => resolve(PATH_TEST_ROOT, ...args)
3130
const fromRoot = (...args) => resolve(PATH_ROOT, ...args) // use outer package
3231
const logList = []
33-
const logger = getLogger(undefined, undefined, undefined, (log) => {
34-
logList.unshift(log)
35-
logList.length = 8
36-
info(log)
32+
const logger = getKitLogger({
33+
logFunc: (log) => {
34+
logList.unshift(log)
35+
logList.length = 8
36+
info(log)
37+
}
3738
})
3839
const verifyLog = (expectLog) => {
3940
if (logList.some((log) => log && log.includes(expectLog))) return
4041
throw new Error(`[verifyLog] expectLog: ${expectLog}, get:\n${logList.map((log) => indentLine(log, ' > ', ' >> ')).join('\n')}`)
4142
}
4243

43-
it('fromPathCombo()', async () => {
44-
info(fromPathCombo({ PATH_ROOT: '/aa/bb' }).fromOutput('cc', 'dd'))
45-
})
46-
4744
it('initOutput()', async () => {
4845
const fromOutput = (...args) => fromTestRoot('output-initOutput', ...args)
4946
const replaceReadmeNonPackageContent = '\n\nTEST_REPLACE_README_NON_PACKAGE_CONTENT'

0 commit comments

Comments
 (0)