@jcoreio/toolchain 1.0.0 → 2.0.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jcoreio/toolchain",
3
- "version": "1.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "base JS build toolchain",
5
5
  "repository": {
6
6
  "type": "git",
package/scripts/init.cjs CHANGED
@@ -1,13 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  const { packageJson } = require('../util/findUps.cjs')
4
+ const fs = require('../util/projectFs.cjs')
4
5
  const preinstall = require('./preinstall.cjs')
5
6
  const execa = require('../util/execa.cjs')
6
7
  const hasTSFiles = require('../util/hasTSFiles.cjs')
7
8
 
8
9
  async function init(args = []) {
9
- const { dependencies = {}, devDependencies = {} } = packageJson
10
- const toolchains = []
10
+ const { version, dependencies = {}, devDependencies = {} } = packageJson
11
+ const toolchains = new Set(
12
+ Object.keys(devDependencies).filter((dep) =>
13
+ dep.startsWith('@jcoreio/toolchain-')
14
+ )
15
+ )
11
16
  const isBabel =
12
17
  devDependencies['@babel/core'] != null ||
13
18
  devDependencies['babel-core'] != null ||
@@ -17,15 +22,17 @@ async function init(args = []) {
17
22
  const isReact = dependencies.react != null || devDependencies.react != null
18
23
  const isMocha = devDependencies['mocha'] != null
19
24
  const isCircle = true // might be false someday
20
- const isSemanticRelease = devDependencies['semantic-release'] != null
25
+ const isSemanticRelease =
26
+ devDependencies['semantic-release'] != null ||
27
+ (await fs.pathExists('release.config.cjs'))
21
28
 
22
- if (isMocha) toolchains.push('@jcoreio/toolchain-mocha')
23
- if (isBabel) toolchains.push('@jcoreio/toolchain-esnext')
24
- if (isFlow) toolchains.push('@jcoreio/toolchain-flow')
25
- if (isTS) toolchains.push('@jcoreio/toolchain-typescript')
26
- if (isReact) toolchains.push('@jcoreio/toolchain-react')
27
- if (isCircle) toolchains.push('@jcoreio/toolchain-circle')
28
- if (isSemanticRelease) toolchains.push('@jcoreio/toolchain-semantic-release')
29
+ if (isMocha) toolchains.add('@jcoreio/toolchain-mocha')
30
+ if (isBabel) toolchains.add('@jcoreio/toolchain-esnext')
31
+ if (isFlow) toolchains.add('@jcoreio/toolchain-flow')
32
+ if (isTS) toolchains.add('@jcoreio/toolchain-typescript')
33
+ if (isReact) toolchains.add('@jcoreio/toolchain-react')
34
+ if (isCircle) toolchains.add('@jcoreio/toolchain-circle')
35
+ if (isSemanticRelease) toolchains.add('@jcoreio/toolchain-semantic-release')
29
36
 
30
37
  const isTest = Boolean(process.env.JCOREIO_TOOLCHAIN_TEST)
31
38
 
@@ -33,20 +40,17 @@ async function init(args = []) {
33
40
  await execa('pnpm', [
34
41
  'add',
35
42
  '-D',
36
- isTest ? '../packages/base' : '@jcoreio/toolchain',
43
+ isTest ? '../packages/base' : `@jcoreio/toolchain@^${version}`,
37
44
  ...(isTest
38
- ? toolchains.map((t) => t.replace(/@jcoreio\/toolchain-/, '../packages/'))
39
- : toolchains),
45
+ ? [...toolchains].map((t) =>
46
+ t.replace(/@jcoreio\/toolchain-/, '../packages/')
47
+ )
48
+ : [...toolchains].map((t) => `${t}@^${version}`)),
40
49
  ])
41
- await execa('tc', ['bootstrap'])
42
- await execa('pnpm', ['i', '--no-frozen-lockfile'])
43
- await execa('tc', ['format'])
44
- await execa('tc', ['lint:fix'])
45
- await execa('tc', ['prepublish'])
50
+ await execa('tc', ['migrate'])
46
51
  }
47
52
 
48
- exports.description =
49
- 'install toolchains, bootstrap, format, lint:fix and prepublish'
53
+ exports.description = 'install toolchains and migrate'
50
54
  exports.run = init
51
55
 
52
56
  if (require.main === module) {
@@ -3,7 +3,7 @@ const path = require('path')
3
3
  const getPluginsObjectAsync = require('../../util/getPluginsObjectAsync.cjs')
4
4
  const { name } = require('../../package.json')
5
5
 
6
- async function bootstrapConfigFiles() {
6
+ async function migrateConfigFiles() {
7
7
  const files = await getPluginsObjectAsync('getConfigFiles')
8
8
  for (const file in files) {
9
9
  const value = files[file]
@@ -30,4 +30,4 @@ async function bootstrapConfigFiles() {
30
30
  }
31
31
  }
32
32
 
33
- module.exports = bootstrapConfigFiles
33
+ module.exports = migrateConfigFiles
@@ -3,7 +3,7 @@ const Path = require('path')
3
3
  const JSON5 = require('json5')
4
4
  const fs = require('../../util/projectFs.cjs')
5
5
 
6
- async function bootstrapEslintConfigs() {
6
+ async function migrateEslintConfigs() {
7
7
  for (const file of await glob(Path.join('**', '.eslintrc{,.json}'))) {
8
8
  const content = JSON5.parse(await fs.readFile(file, 'utf8'))
9
9
  if (content.extends) {
@@ -27,4 +27,4 @@ async function bootstrapEslintConfigs() {
27
27
  }
28
28
  }
29
29
 
30
- module.exports = bootstrapEslintConfigs
30
+ module.exports = migrateEslintConfigs
@@ -1,7 +1,7 @@
1
1
  const execa = require('../../util/execa.cjs')
2
2
  const fs = require('../../util/projectFs.cjs')
3
3
 
4
- async function bootstrapGitignore() {
4
+ async function migrateGitignore() {
5
5
  const paths = {
6
6
  '/dist': 'dist',
7
7
  '.nyc_output': '.nyc_output',
@@ -34,4 +34,4 @@ async function bootstrapGitignore() {
34
34
  console.error('updated .gitignore')
35
35
  }
36
36
  }
37
- module.exports = bootstrapGitignore
37
+ module.exports = migrateGitignore
@@ -2,7 +2,7 @@ const glob = require('@jcoreio/toolchain/util/glob.cjs')
2
2
  const fs = require('@jcoreio/toolchain/util/projectFs.cjs')
3
3
  const path = require('path')
4
4
 
5
- async function bootstrapMoveTypeDefs() {
5
+ async function migrateMoveTypeDefs() {
6
6
  for (const src of await glob('*.{d.ts,js.flow}')) {
7
7
  const dest = path.join('src', src)
8
8
  await fs.move(src, dest)
@@ -11,4 +11,4 @@ async function bootstrapMoveTypeDefs() {
11
11
  }
12
12
  }
13
13
 
14
- module.exports = bootstrapMoveTypeDefs
14
+ module.exports = migrateMoveTypeDefs
@@ -6,14 +6,14 @@ const semver = require('semver')
6
6
  const isEmpty = require('lodash/isEmpty')
7
7
  const pick = require('lodash/pick')
8
8
 
9
- async function bootstrapProjectPackageJson() {
9
+ async function migrateProjectPackageJson() {
10
10
  const { merge, unset } = require('lodash')
11
11
 
12
12
  const packageJson = await fs.readJson('package.json')
13
13
  const devDependencies =
14
14
  packageJson.devDependencies || (packageJson.devDependencies = {})
15
15
 
16
- await getPluginsAsyncFunction('bootstrapProjectPackageJson')(packageJson)
16
+ await getPluginsAsyncFunction('migrateProjectPackageJson')(packageJson)
17
17
 
18
18
  for (const path of [
19
19
  'commitlint',
@@ -64,7 +64,7 @@ async function bootstrapProjectPackageJson() {
64
64
  ]) {
65
65
  unset(packageJson, path)
66
66
  }
67
- for (const dep of require('./bootstrapRemoveDevDeps.cjs')) {
67
+ for (const dep of require('./migrateRemoveDevDeps.cjs')) {
68
68
  delete devDependencies[dep]
69
69
  }
70
70
 
@@ -114,4 +114,4 @@ async function bootstrapProjectPackageJson() {
114
114
  console.error('updated package.json')
115
115
  }
116
116
 
117
- module.exports = bootstrapProjectPackageJson
117
+ module.exports = migrateProjectPackageJson
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('../util/projectFs.cjs')
4
+ const getPluginsAsyncFunction = require('../util/getPluginsAsyncFunction.cjs')
5
+
6
+ async function migrate(args = []) {
7
+ const execa = require('../util/execa.cjs')
8
+ const installGitHooks = require('./install-git-hooks.cjs')
9
+ const migrateProjectPackageJson = require('./migrate/migrateProjectPackageJson.cjs')
10
+ const migrateEslintConfigs = require('./migrate/migrateEslintConfigs.cjs')
11
+ const migrateConfigFiles = require('./migrate/migrateConfigFiles.cjs')
12
+ const migrateMoveTypeDefs = require('./migrate/migrateMoveTypeDefs.cjs')
13
+ const migrateGitignore = require('./migrate/migrateGitignore.cjs')
14
+ const migrateRemoveFiles = require('./migrate/migrateRemoveFiles.cjs')
15
+ const hasYarnOrNpmLockfile = require('../util/hasYarnOrNpmLockfile.cjs')
16
+
17
+ await execa('git', ['init'])
18
+ await installGitHooks.run()
19
+ await migrateProjectPackageJson()
20
+ if (await hasYarnOrNpmLockfile()) {
21
+ await execa('pnpm', ['import'])
22
+ }
23
+ await Promise.all(
24
+ migrateRemoveFiles.map(async (file) => {
25
+ const exists = await fs.pathExists(file)
26
+ if (exists) {
27
+ await fs.remove(file)
28
+ // eslint-disable-next-line no-console
29
+ console.error('removed', file)
30
+ }
31
+ })
32
+ )
33
+ await migrateConfigFiles()
34
+ await migrateEslintConfigs()
35
+ await migrateMoveTypeDefs()
36
+ await migrateGitignore()
37
+ await getPluginsAsyncFunction('migrate')(args)
38
+
39
+ if (!args.includes('--config-only')) {
40
+ await execa('pnpm', ['i', '--no-frozen-lockfile'])
41
+ await execa('tc', ['lint:fix'])
42
+ await execa('tc', ['format'])
43
+ }
44
+ }
45
+
46
+ exports.description =
47
+ 'update dependencies and config, fix lint errors and format'
48
+ exports.run = migrate
49
+
50
+ if (require.main === module) {
51
+ migrate().then(
52
+ () => process.exit(0),
53
+ (error) => {
54
+ // eslint-disable-next-line no-console
55
+ console.error(error.stack)
56
+ process.exit(error.exitCode != null ? error.exitCode : 1)
57
+ }
58
+ )
59
+ }
@@ -5,7 +5,7 @@ const chalk = require('chalk')
5
5
  const getPluginsObjectSync = require('../util/getPluginsObjectSync.cjs')
6
6
 
7
7
  const scripts = {
8
- bootstrap: require('./bootstrap.cjs'),
8
+ migrate: require('./migrate.cjs'),
9
9
  build: require('./build.cjs'),
10
10
  check: require('./check.cjs'),
11
11
  clean: require('./clean.cjs'),
@@ -16,6 +16,7 @@ const scripts = {
16
16
  'lint:fix': require('./lint-fix.cjs'),
17
17
  'open:coverage': require('./open-coverage.cjs'),
18
18
  prepublish: require('./prepublish.cjs'),
19
+ upgrade: require('./upgrade.cjs'),
19
20
  version: {
20
21
  description: `print version of ${name}`,
21
22
  run: () => {
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { packageJson } = require('../util/findUps.cjs')
4
+ const execa = require('../util/execa.cjs')
5
+
6
+ async function upgrade([version] = []) {
7
+ const { devDependencies = {} } = packageJson
8
+ const toolchains = Object.keys(devDependencies).filter((pkg) =>
9
+ pkg.startsWith('@jcoreio/toolchain-')
10
+ )
11
+ const isTest = Boolean(process.env.JCOREIO_TOOLCHAIN_TEST)
12
+
13
+ if (!isTest && !version) {
14
+ version = (
15
+ await execa('npm', ['view', '@jcoreio/toolchain', 'version'], {
16
+ stdio: 'pipe',
17
+ })
18
+ ).stdout.trim()
19
+ }
20
+
21
+ await execa('pnpm', [
22
+ 'add',
23
+ '-D',
24
+ isTest ? '../packages/base' : `@jcoreio/toolchain@^${version}`,
25
+ ...(isTest
26
+ ? toolchains.map((t) => t.replace(/@jcoreio\/toolchain-/, '../packages/'))
27
+ : toolchains.map((t) => `${t}@^${version}`)),
28
+ ])
29
+ await execa('tc', ['migrate'])
30
+ }
31
+
32
+ exports.description = 'upgrade toolchains and migrate'
33
+ exports.run = upgrade
34
+
35
+ if (require.main === module) {
36
+ upgrade().then(
37
+ () => process.exit(0),
38
+ (error) => {
39
+ // eslint-disable-next-line no-console
40
+ console.error(error.stack)
41
+ process.exit(error.exitCode != null ? error.exitCode : 1)
42
+ }
43
+ )
44
+ }
@@ -1,52 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- const fs = require('../util/projectFs.cjs')
4
- const getPluginsAsyncFunction = require('../util/getPluginsAsyncFunction.cjs')
5
-
6
- async function bootstrap(args = []) {
7
- const execa = require('../util/execa.cjs')
8
- const installGitHooks = require('./install-git-hooks.cjs')
9
- const bootstrapProjectPackageJson = require('./bootstrap/bootstrapProjectPackageJson.cjs')
10
- const bootstrapEslintConfigs = require('./bootstrap/bootstrapEslintConfigs.cjs')
11
- const bootstrapConfigFiles = require('./bootstrap/bootstrapConfigFiles.cjs')
12
- const bootstrapMoveTypeDefs = require('./bootstrap/bootstrapMoveTypeDefs.cjs')
13
- const bootstrapGitignore = require('./bootstrap/bootstrapGitignore.cjs')
14
- const bootstrapRemoveFiles = require('./bootstrap/bootstrapRemoveFiles.cjs')
15
- const hasYarnOrNpmLockfile = require('../util/hasYarnOrNpmLockfile.cjs')
16
-
17
- await execa('git', ['init'])
18
- await installGitHooks.run()
19
- await bootstrapProjectPackageJson()
20
- if (await hasYarnOrNpmLockfile()) {
21
- await execa('pnpm', ['import'])
22
- }
23
- await Promise.all(
24
- bootstrapRemoveFiles.map(async (file) => {
25
- const exists = await fs.pathExists(file)
26
- if (exists) {
27
- await fs.remove(file)
28
- // eslint-disable-next-line no-console
29
- console.error('removed', file)
30
- }
31
- })
32
- )
33
- await bootstrapConfigFiles()
34
- await bootstrapEslintConfigs()
35
- await bootstrapMoveTypeDefs()
36
- await bootstrapGitignore()
37
- await getPluginsAsyncFunction('bootstrap')(args)
38
- }
39
-
40
- exports.description = 'set up project'
41
- exports.run = bootstrap
42
-
43
- if (require.main === module) {
44
- bootstrap().then(
45
- () => process.exit(0),
46
- (error) => {
47
- // eslint-disable-next-line no-console
48
- console.error(error.stack)
49
- process.exit(error.exitCode != null ? error.exitCode : 1)
50
- }
51
- )
52
- }