@jcoreio/toolchain 3.10.3 → 3.11.1
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/.eslintrc.js +1 -1
- package/githooks/runHook.cjs +1 -1
- package/package.json +2 -1
- package/plugins/getConfigFiles.cjs +22 -10
- package/scripts/init.cjs +2 -1
- package/scripts/migrate/migrateProjectPackageJson.cjs +11 -5
- package/scripts/migrate.cjs +14 -3
- package/scripts/upgrade.cjs +2 -1
- package/util/findUps.cjs +57 -12
- /package/{eslint.config.cjs → eslintConfig.cjs} +0 -0
package/.eslintrc.js
CHANGED
package/githooks/runHook.cjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jcoreio/toolchain",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.11.1",
|
|
4
4
|
"description": "base JS build toolchain",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"resolve-bin": "^1.0.0",
|
|
33
33
|
"semver": "^7.5.3",
|
|
34
34
|
"toposort": "^2.0.2",
|
|
35
|
+
"yaml": "^2.4.1",
|
|
35
36
|
"zod": "^3.21.4"
|
|
36
37
|
},
|
|
37
38
|
"toolchainManaged": {
|
|
@@ -17,18 +17,30 @@ module.exports = [
|
|
|
17
17
|
async function getConfigFiles() {
|
|
18
18
|
const { env, rules } = (await getRootEslintConfig()) || {}
|
|
19
19
|
const files = {
|
|
20
|
-
'.eslintrc.cjs':
|
|
20
|
+
'.eslintrc.cjs': (prev) =>
|
|
21
|
+
prev
|
|
22
|
+
? prev.replace(
|
|
23
|
+
new RegExp(`${name}/eslint\\.config\\.cjs`, 'g'),
|
|
24
|
+
`${name}/eslintConfig.cjs`
|
|
25
|
+
)
|
|
26
|
+
: dedent`
|
|
21
27
|
/* eslint-env node, es2018 */
|
|
22
28
|
module.exports = {
|
|
23
|
-
extends: [require.resolve('${name}/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
extends: [require.resolve('${name}/eslintConfig.cjs')],${
|
|
30
|
+
env
|
|
31
|
+
? `\nenv: ${JSON.stringify(env, null, 2).replace(
|
|
32
|
+
/\n/gm,
|
|
33
|
+
'\n '
|
|
34
|
+
)},`
|
|
35
|
+
: ''
|
|
36
|
+
}${
|
|
37
|
+
rules
|
|
38
|
+
? `\nrules: ${JSON.stringify(rules, null, 2).replace(
|
|
39
|
+
/\n/gm,
|
|
40
|
+
'\n '
|
|
41
|
+
)}`
|
|
42
|
+
: ''
|
|
43
|
+
}
|
|
32
44
|
}
|
|
33
45
|
`,
|
|
34
46
|
'toolchain.config.cjs': async (existing) => {
|
package/scripts/init.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
const { packageJson } = require('../util/findUps.cjs')
|
|
3
|
+
const { packageJson, isMonorepoRoot } = require('../util/findUps.cjs')
|
|
4
4
|
const fs = require('../util/projectFs.cjs')
|
|
5
5
|
const execa = require('../util/execa.cjs')
|
|
6
6
|
const hasTSFiles = require('../util/hasTSFiles.cjs')
|
|
@@ -69,6 +69,7 @@ async function init(args = []) {
|
|
|
69
69
|
await execa('pnpm', [
|
|
70
70
|
'add',
|
|
71
71
|
'-D',
|
|
72
|
+
...(isMonorepoRoot ? ['-w'] : []),
|
|
72
73
|
isTest ? '../packages/base' : `${name}@^${version}`,
|
|
73
74
|
...(isTest
|
|
74
75
|
? [...selectedToolchains].map((t) =>
|
|
@@ -149,11 +149,17 @@ async function migrateProjectPackageJson() {
|
|
|
149
149
|
const versionRange = managedSection[dep]
|
|
150
150
|
if (isTest && dep.startsWith(`${name}-`)) {
|
|
151
151
|
pkgSection[dep] = `link:${dep.replace(`${name}-`, '../packages/')}`
|
|
152
|
-
} else
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
152
|
+
} else {
|
|
153
|
+
try {
|
|
154
|
+
if (
|
|
155
|
+
!pkgSection[dep] ||
|
|
156
|
+
!semver.satisfies(semver.minVersion(pkgSection[dep]), versionRange)
|
|
157
|
+
) {
|
|
158
|
+
pkgSection[dep] = versionRange
|
|
159
|
+
}
|
|
160
|
+
} catch (error) {
|
|
161
|
+
// ignore; package.json probably has a version like workspace:* etc
|
|
162
|
+
}
|
|
157
163
|
}
|
|
158
164
|
}
|
|
159
165
|
}
|
package/scripts/migrate.cjs
CHANGED
|
@@ -4,6 +4,11 @@ const getPluginsAsyncFunction = require('../util/getPluginsAsyncFunction.cjs')
|
|
|
4
4
|
|
|
5
5
|
async function migrate(args = []) {
|
|
6
6
|
const execa = require('../util/execa.cjs')
|
|
7
|
+
const {
|
|
8
|
+
findGitDir,
|
|
9
|
+
isMonorepoSubpackage,
|
|
10
|
+
isMonorepoRoot,
|
|
11
|
+
} = require('../util/findUps.cjs')
|
|
7
12
|
const installGitHooks = require('./install-git-hooks.cjs')
|
|
8
13
|
const migrateProjectPackageJson = require('./migrate/migrateProjectPackageJson.cjs')
|
|
9
14
|
const migrateEslintConfigs = require('./migrate/migrateEslintConfigs.cjs')
|
|
@@ -12,8 +17,10 @@ async function migrate(args = []) {
|
|
|
12
17
|
const migrateGitignore = require('./migrate/migrateGitignore.cjs')
|
|
13
18
|
const hasYarnOrNpmLockfile = require('../util/hasYarnOrNpmLockfile.cjs')
|
|
14
19
|
|
|
15
|
-
|
|
16
|
-
|
|
20
|
+
if (!isMonorepoSubpackage && !findGitDir()) {
|
|
21
|
+
await execa('git', ['init'])
|
|
22
|
+
await installGitHooks.run()
|
|
23
|
+
}
|
|
17
24
|
await migrateProjectPackageJson()
|
|
18
25
|
if (await hasYarnOrNpmLockfile()) {
|
|
19
26
|
await execa('pnpm', ['import'])
|
|
@@ -25,7 +32,11 @@ async function migrate(args = []) {
|
|
|
25
32
|
await getPluginsAsyncFunction('migrate')(args)
|
|
26
33
|
|
|
27
34
|
if (!args.includes('--config-only')) {
|
|
28
|
-
await execa('pnpm', [
|
|
35
|
+
await execa('pnpm', [
|
|
36
|
+
'i',
|
|
37
|
+
'--fix-lockfile',
|
|
38
|
+
...(isMonorepoRoot ? ['-w'] : []),
|
|
39
|
+
])
|
|
29
40
|
await execa('tc', ['format'])
|
|
30
41
|
await execa('tc', ['lint:fix'])
|
|
31
42
|
}
|
package/scripts/upgrade.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
const { packageJson } = require('../util/findUps.cjs')
|
|
3
|
+
const { packageJson, isMonorepoRoot } = require('../util/findUps.cjs')
|
|
4
4
|
const execa = require('../util/execa.cjs')
|
|
5
5
|
const { name } = require('../package.json')
|
|
6
6
|
|
|
@@ -22,6 +22,7 @@ async function upgrade([version] = []) {
|
|
|
22
22
|
await execa('pnpm', [
|
|
23
23
|
'add',
|
|
24
24
|
'-D',
|
|
25
|
+
...(isMonorepoRoot ? ['-w'] : []),
|
|
25
26
|
isTest ? '../packages/base' : `${name}@^${version}`,
|
|
26
27
|
...(isTest
|
|
27
28
|
? toolchains.map((t) => t.replace(`${name}-`, '../packages/'))
|
package/util/findUps.cjs
CHANGED
|
@@ -6,38 +6,83 @@ const once = require('./once.cjs')
|
|
|
6
6
|
const { name } = require('../package.json')
|
|
7
7
|
const configSchema = require('./configSchema.cjs')
|
|
8
8
|
|
|
9
|
-
const findGitDir = once(function findGitDir(
|
|
10
|
-
cwd = process.env.INIT_CWD || process.cwd()
|
|
11
|
-
) {
|
|
12
|
-
return findUp.sync('.git', { cwd, type: 'directory' })
|
|
13
|
-
})
|
|
14
|
-
exports.findGitDir = findGitDir
|
|
15
|
-
|
|
16
9
|
let cwd = process.cwd()
|
|
17
10
|
|
|
18
11
|
const nodeModulesMatch = /\/node_modules(\/|$)/.exec(cwd)
|
|
19
12
|
if (nodeModulesMatch) cwd = cwd.substring(0, nodeModulesMatch.index)
|
|
20
13
|
|
|
21
|
-
const packageJsonFile = findUp.sync('package.json', {
|
|
14
|
+
const packageJsonFile = (exports.packageJsonFile = findUp.sync('package.json', {
|
|
15
|
+
cwd,
|
|
16
|
+
type: 'file',
|
|
17
|
+
}))
|
|
22
18
|
if (!packageJsonFile) {
|
|
23
19
|
throw new Error(
|
|
24
20
|
`failed to find project package.json in a parent directory of ${cwd}`
|
|
25
21
|
)
|
|
26
22
|
}
|
|
27
|
-
exports.packageJsonFile = packageJsonFile
|
|
28
23
|
const packageJson = (exports.packageJson = fs.readJsonSync(packageJsonFile))
|
|
29
24
|
const projectDir = (exports.projectDir = Path.dirname(packageJsonFile))
|
|
30
25
|
|
|
26
|
+
const pnpmWorkspaceFile = (exports.pnpmWorkspaceFile = findUp.sync(
|
|
27
|
+
'pnpm-workspace.yaml',
|
|
28
|
+
{
|
|
29
|
+
cwd,
|
|
30
|
+
type: 'file',
|
|
31
|
+
}
|
|
32
|
+
))
|
|
33
|
+
const pnpmWorkspace = pnpmWorkspaceFile
|
|
34
|
+
? require('yaml').parse(fs.readFileSync(pnpmWorkspaceFile, 'utf8'))
|
|
35
|
+
: undefined
|
|
36
|
+
|
|
37
|
+
const isMonorepoSubpackage = (exports.isMonorepoSubpackage =
|
|
38
|
+
pnpmWorkspace && Array.isArray(pnpmWorkspace.packages)
|
|
39
|
+
? pnpmWorkspace.packages.some((p) =>
|
|
40
|
+
new RegExp(`^${p.replace(/\*/g, '[^/]+')}$`).test(
|
|
41
|
+
Path.relative(Path.dirname(pnpmWorkspaceFile), projectDir)
|
|
42
|
+
)
|
|
43
|
+
)
|
|
44
|
+
: false)
|
|
45
|
+
|
|
46
|
+
const isMonorepoRoot = (exports.isMonorepoRoot =
|
|
47
|
+
pnpmWorkspaceFile != null && Path.dirname(pnpmWorkspaceFile) === projectDir)
|
|
48
|
+
|
|
49
|
+
const monorepoProjectDir = (exports.monorepoProjectDir =
|
|
50
|
+
isMonorepoSubpackage || isMonorepoRoot
|
|
51
|
+
? Path.dirname(pnpmWorkspaceFile)
|
|
52
|
+
: undefined)
|
|
53
|
+
|
|
54
|
+
const monorepoPackageJsonFile = (exports.monorepoPackageJsonFile =
|
|
55
|
+
monorepoProjectDir
|
|
56
|
+
? Path.join(monorepoProjectDir, 'package.json')
|
|
57
|
+
: undefined)
|
|
58
|
+
exports.monorepoPackageJson = monorepoPackageJsonFile
|
|
59
|
+
? fs.readJsonSync(monorepoPackageJsonFile)
|
|
60
|
+
: undefined
|
|
61
|
+
|
|
62
|
+
const findGitDir = once(function findGitDir(cwd = process.cwd()) {
|
|
63
|
+
let stopAt = Path.dirname(monorepoProjectDir || projectDir)
|
|
64
|
+
if (stopAt === '/') stopAt = undefined
|
|
65
|
+
return findUp.sync((dir) => (dir === stopAt ? findUp.stop : '.git'), {
|
|
66
|
+
cwd,
|
|
67
|
+
type: 'directory',
|
|
68
|
+
})
|
|
69
|
+
})
|
|
70
|
+
exports.findGitDir = findGitDir
|
|
71
|
+
|
|
31
72
|
const toolchainPackages = (exports.toolchainPackages = [
|
|
73
|
+
packageJson.name,
|
|
32
74
|
...Object.keys(packageJson.dependencies || {}),
|
|
33
75
|
...Object.keys(packageJson.devDependencies || {}),
|
|
34
76
|
].filter((dep) => dep.startsWith(name)))
|
|
35
77
|
|
|
36
78
|
const toolchainPackageJsons = (exports.toolchainPackageJsons = {})
|
|
37
79
|
for (const pkg of toolchainPackages) {
|
|
38
|
-
toolchainPackageJsons[pkg] =
|
|
39
|
-
|
|
40
|
-
|
|
80
|
+
toolchainPackageJsons[pkg] =
|
|
81
|
+
pkg === packageJson.name
|
|
82
|
+
? packageJson
|
|
83
|
+
: require(require.resolve(`${pkg}/package.json`, {
|
|
84
|
+
paths: [projectDir],
|
|
85
|
+
}))
|
|
41
86
|
}
|
|
42
87
|
|
|
43
88
|
let toolchainConfigFile
|
|
File without changes
|