@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 CHANGED
@@ -1,5 +1,5 @@
1
1
  module.exports = {
2
- extends: [require.resolve('./eslint.config.cjs')],
2
+ extends: [require.resolve('./eslintConfig.cjs')],
3
3
  env: {
4
4
  node: true,
5
5
  },
@@ -4,7 +4,7 @@ const execa = require('../util/execa.cjs')
4
4
 
5
5
  module.exports = async function runHook(hookName) {
6
6
  try {
7
- const gitDir = findGitDir()
7
+ const gitDir = findGitDir(process.env.INIT_CWD)
8
8
  if (!gitDir) {
9
9
  throw new Error(`failed to find .git directory`)
10
10
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jcoreio/toolchain",
3
- "version": "3.10.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': dedent`
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}/eslint.config.cjs')],${
24
- env
25
- ? `\nenv: ${JSON.stringify(env, null, 2).replace(/\n/gm, '\n ')},`
26
- : ''
27
- }${
28
- rules
29
- ? `\nrules: ${JSON.stringify(rules, null, 2).replace(/\n/gm, '\n ')}`
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 if (
153
- !pkgSection[dep] ||
154
- !semver.satisfies(semver.minVersion(pkgSection[dep]), versionRange)
155
- ) {
156
- pkgSection[dep] = versionRange
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
  }
@@ -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
- await execa('git', ['init'])
16
- await installGitHooks.run()
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', ['i', '--fix-lockfile'])
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
  }
@@ -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', { cwd, type: 'file' })
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] = require(require.resolve(`${pkg}/package.json`, {
39
- paths: [projectDir],
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