@jcoreio/toolchain 4.6.1 → 4.7.0

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": "4.6.1",
3
+ "version": "4.7.0",
4
4
  "description": "base JS build toolchain",
5
5
  "repository": {
6
6
  "type": "git",
@@ -15,7 +15,7 @@ async function getRootEslintConfig() {
15
15
  }
16
16
 
17
17
  module.exports = [
18
- async function getConfigFiles() {
18
+ async function getConfigFiles({ fromVersion }) {
19
19
  const { env, rules } = (await getRootEslintConfig()) || {}
20
20
  const files = {
21
21
  ...(isMonorepoSubpackage
@@ -25,12 +25,9 @@ module.exports = [
25
25
  optional=false
26
26
  `,
27
27
  }),
28
- '.eslintrc.cjs': (prev) =>
29
- prev
30
- ? prev.replace(
31
- new RegExp(`${name}/eslint\\.config\\.cjs`, 'g'),
32
- `${name}/eslintConfig.cjs`
33
- )
28
+ '.eslintrc.cjs': async (existing) =>
29
+ existing && fromVersion
30
+ ? existing
34
31
  : dedent`
35
32
  /* eslint-env node, es2018 */
36
33
  module.exports = {
@@ -72,7 +69,10 @@ module.exports = [
72
69
  'lint-staged.config.cjs',
73
70
  'prettier.config.cjs',
74
71
  ]) {
75
- files[file] = dedent`
72
+ files[file] = async (existing) =>
73
+ existing && fromVersion
74
+ ? existing
75
+ : dedent`
76
76
  /* eslint-env node, es2018 */
77
77
  const base = require('${name}/${file}')
78
78
  module.exports = {
@@ -89,24 +89,30 @@ module.exports = [
89
89
  : await getPluginsArraySync('vscodeLaunch')
90
90
 
91
91
  if (tasks.length) {
92
- files['.vscode/tasks.json'] = JSON.stringify(
93
- {
94
- version: '2.0.0',
95
- tasks,
96
- },
97
- null,
98
- 2
99
- )
92
+ files['.vscode/tasks.json'] = async (existing) =>
93
+ existing && fromVersion
94
+ ? existing
95
+ : JSON.stringify(
96
+ {
97
+ version: '2.0.0',
98
+ tasks,
99
+ },
100
+ null,
101
+ 2
102
+ )
100
103
  }
101
104
  if (launch.length) {
102
- files['.vscode/launch.json'] = JSON.stringify(
103
- {
104
- version: '0.2.0',
105
- configurations: launch,
106
- },
107
- null,
108
- 2
109
- )
105
+ files['.vscode/launch.json'] = async (existing) =>
106
+ existing && fromVersion
107
+ ? existing
108
+ : JSON.stringify(
109
+ {
110
+ version: '0.2.0',
111
+ configurations: launch,
112
+ },
113
+ null,
114
+ 2
115
+ )
110
116
  }
111
117
 
112
118
  return files
@@ -3,8 +3,8 @@ const path = require('path')
3
3
  const getPluginsObjectAsync = require('../../util/getPluginsObjectAsync.cjs')
4
4
  const { name } = require('../../package.json')
5
5
 
6
- async function migrateConfigFiles() {
7
- const files = await getPluginsObjectAsync('getConfigFiles')
6
+ async function migrateConfigFiles({ fromVersion }) {
7
+ const files = await getPluginsObjectAsync('getConfigFiles', { fromVersion })
8
8
  for (const file in files) {
9
9
  const value = files[file]
10
10
  let content, overwrite
@@ -3,7 +3,11 @@ const Path = require('path')
3
3
  const JSON5 = require('json5')
4
4
  const fs = require('../../util/projectFs.cjs')
5
5
 
6
- async function migrateEslintConfigs() {
6
+ async function migrateEslintConfigs({ fromVersion }) {
7
+ if (fromVersion) {
8
+ // only do this migration on init
9
+ return
10
+ }
7
11
  for (const file of await glob(Path.join('**', '.eslintrc{,.json}'))) {
8
12
  const content = JSON5.parse(await fs.readFile(file, 'utf8'))
9
13
  if (content.extends) {
@@ -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 migrateGitignore() {
4
+ async function migrateGitignore({ fromVersion }) {
5
5
  const paths = {
6
6
  '/dist': 'dist',
7
7
  '.nyc_output': '.nyc_output',
@@ -12,60 +12,69 @@ const confirm = require('../../util/confirm.cjs')
12
12
  const unset = require('../../util/unset.cjs')
13
13
  const merge = require('../../util/merge.cjs')
14
14
 
15
- async function migrateProjectPackageJson() {
15
+ async function migrateProjectPackageJson({ fromVersion }) {
16
16
  const packageJson = await fs.readJson('package.json')
17
17
  const devDependencies =
18
18
  packageJson.devDependencies || (packageJson.devDependencies = {})
19
19
 
20
- await getPluginsAsyncFunction('migrateProjectPackageJson')(packageJson)
20
+ await getPluginsAsyncFunction('migrateProjectPackageJson')(packageJson, {
21
+ fromVersion,
22
+ })
21
23
 
22
- for (const path of [
23
- 'commitlint',
24
- 'config.commitizen',
25
- 'config.eslint',
26
- 'config.lint',
27
- 'config.mocha',
28
- 'config.prettier',
29
- 'eslintConfig',
30
- 'files',
31
- 'husky',
32
- 'husky',
33
- 'lint-staged',
34
- 'nyc',
35
- 'prettier',
36
- 'renovate',
37
- 'scripts.build:cjs',
38
- 'scripts.build:js',
39
- 'scripts.build:mjs',
40
- 'scripts.build:types',
41
- 'scripts.build',
42
- 'scripts.clean',
43
- 'scripts.codecov',
44
- 'scripts.coverage',
45
- 'scripts.commitmsg',
46
- 'scripts.flow:coverage',
47
- 'scripts.flow:watch',
48
- 'scripts.flow',
49
- 'scripts.lint:fix',
50
- 'scripts.lint:watch',
51
- 'scripts.lint',
52
- 'scripts.open:coverage',
53
- 'scripts.precommit',
54
- 'scripts.prepublishOnly',
55
- 'scripts.prepush',
56
- 'scripts.prettier:check',
57
- 'scripts.prettier',
58
- 'scripts.semantic-release',
59
- 'scripts.test:debug',
60
- 'scripts.test:watch',
61
- 'scripts.test',
62
- 'scripts.travis-deploy-once',
63
- 'scripts.tsc:watch',
64
- 'scripts.tsc',
65
- ]) {
66
- unset(packageJson, path)
24
+ if (!fromVersion) {
25
+ for (const path of [
26
+ 'commitlint',
27
+ 'config.commitizen',
28
+ 'config.eslint',
29
+ 'config.lint',
30
+ 'config.mocha',
31
+ 'config.prettier',
32
+ 'eslintConfig',
33
+ 'files',
34
+ 'husky',
35
+ 'husky',
36
+ 'lint-staged',
37
+ 'nyc',
38
+ 'prettier',
39
+ 'renovate',
40
+ 'scripts.build:cjs',
41
+ 'scripts.build:js',
42
+ 'scripts.build:mjs',
43
+ 'scripts.build:types',
44
+ 'scripts.build',
45
+ 'scripts.clean',
46
+ 'scripts.codecov',
47
+ 'scripts.coverage',
48
+ 'scripts.commitmsg',
49
+ 'scripts.flow:coverage',
50
+ 'scripts.flow:watch',
51
+ 'scripts.flow',
52
+ 'scripts.lint:fix',
53
+ 'scripts.lint:watch',
54
+ 'scripts.lint',
55
+ 'scripts.open:coverage',
56
+ 'scripts.precommit',
57
+ 'scripts.prepublishOnly',
58
+ 'scripts.prepush',
59
+ 'scripts.prettier:check',
60
+ 'scripts.prettier',
61
+ 'scripts.semantic-release',
62
+ 'scripts.test:debug',
63
+ 'scripts.test:watch',
64
+ 'scripts.test',
65
+ 'scripts.travis-deploy-once',
66
+ 'scripts.tsc:watch',
67
+ 'scripts.tsc',
68
+ ]) {
69
+ unset(packageJson, path)
70
+ }
67
71
  }
68
- if (!packageJson.main && !packageJson.exports && !packageJson.module) {
72
+ if (
73
+ !fromVersion &&
74
+ !packageJson.main &&
75
+ !packageJson.exports &&
76
+ !packageJson.module
77
+ ) {
69
78
  const hasIndexTypes =
70
79
  (await fs.pathExists(Path.join('src', 'index.ts'))) ||
71
80
  (await fs.pathExists(Path.join('src', 'index.tsx'))) ||
@@ -79,59 +88,68 @@ async function migrateProjectPackageJson() {
79
88
  if (hasIndexTypes) {
80
89
  packageJson.types = 'dist/index.d.ts'
81
90
  }
82
- }
83
- for (const dep of require('./migrateRemoveDevDeps.cjs')) {
84
- delete devDependencies[dep]
85
- }
86
91
 
87
- if (!packageJson.exports && packageJson.main) {
88
- const relativize = (p) => (p.startsWith('.') ? p : `./${p}`)
92
+ for (const dep of require('./migrateRemoveDevDeps.cjs')) {
93
+ delete devDependencies[dep]
94
+ }
89
95
 
90
- const dotStar = await confirm({
91
- type: 'confirm',
92
- initial: true,
93
- ifNotInteractive: false,
94
- message: 'Add ./* exports map to package.json?',
95
- })
96
- const outputEsm = await confirmOutputEsm()
97
- packageJson.exports = {
98
- './package.json': './package.json',
99
- '.': {
100
- ...(packageJson.types ? { types: relativize(packageJson.types) } : {}),
101
- ...(outputEsm !== false && packageJson.module
102
- ? { import: relativize(packageJson.module) }
96
+ if (
97
+ semver.lt(fromVersion || '0.0.0', '3.0.0') &&
98
+ !packageJson.exports &&
99
+ packageJson.main
100
+ ) {
101
+ const relativize = (p) => (p.startsWith('.') ? p : `./${p}`)
102
+
103
+ const dotStar = await confirm({
104
+ type: 'confirm',
105
+ initial: true,
106
+ ifNotInteractive: false,
107
+ message: 'Add ./* exports map to package.json?',
108
+ })
109
+ const outputEsm = await confirmOutputEsm()
110
+ packageJson.exports = {
111
+ './package.json': './package.json',
112
+ '.': {
113
+ ...(packageJson.types
114
+ ? { types: relativize(packageJson.types) }
115
+ : {}),
116
+ ...(outputEsm !== false && packageJson.module
117
+ ? { import: relativize(packageJson.module) }
118
+ : {}),
119
+ default: relativize(packageJson.main),
120
+ },
121
+ ...(dotStar
122
+ ? {
123
+ './*': {
124
+ types: './*.d.ts',
125
+ ...(outputEsm !== false ? { import: './*.mjs' } : {}),
126
+ default: './*.js',
127
+ },
128
+ }
103
129
  : {}),
104
- default: relativize(packageJson.main),
105
- },
106
- ...(dotStar
107
- ? {
108
- './*': {
109
- types: './*.d.ts',
110
- ...(outputEsm !== false ? { import: './*.mjs' } : {}),
111
- default: './*.js',
112
- },
113
- }
114
- : {}),
130
+ }
115
131
  }
116
132
  }
117
133
 
118
134
  merge(
119
135
  packageJson,
120
- {
121
- version: '0.0.0-development',
122
- sideEffects: false,
123
- scripts: {
124
- tc: 'toolchain',
125
- toolchain: 'toolchain',
126
- test: 'toolchain test',
127
- prepublishOnly:
128
- 'echo This package is meant to be published by semantic-release from the dist build directory. && exit 1',
129
- },
130
- },
136
+ fromVersion
137
+ ? {}
138
+ : {
139
+ version: '0.0.0-development',
140
+ sideEffects: false,
141
+ scripts: {
142
+ tc: 'toolchain',
143
+ toolchain: 'toolchain',
144
+ test: 'toolchain test',
145
+ prepublishOnly:
146
+ 'echo This package is meant to be published by semantic-release from the dist build directory. && exit 1',
147
+ },
148
+ },
131
149
  pick(toolchainManaged, 'engines', 'packageManager'),
132
150
  pick(packageJson, 'engines')
133
151
  )
134
- if (isEmpty(packageJson.config)) delete packageJson.config
152
+ if (!fromVersion && isEmpty(packageJson.config)) delete packageJson.config
135
153
 
136
154
  const isTest = Boolean(process.env.JCOREIO_TOOLCHAIN_SELF_TEST)
137
155
 
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ const { packageJson } = require('../util/findUps.cjs')
4
+ const { name } = require('../package.json')
3
5
  const getPluginsAsyncFunction = require('../util/getPluginsAsyncFunction.cjs')
4
6
 
5
7
  async function migrate(args = []) {
@@ -16,20 +18,26 @@ async function migrate(args = []) {
16
18
  const migrateMoveTypeDefs = require('./migrate/migrateMoveTypeDefs.cjs')
17
19
  const migrateGitignore = require('./migrate/migrateGitignore.cjs')
18
20
  const hasYarnOrNpmLockfile = require('../util/hasYarnOrNpmLockfile.cjs')
21
+ const writeMigratedVersion = require('../util/writeMigratedVersion.cjs')
19
22
 
20
- if (!isMonorepoSubpackage && !findGitDir()) {
23
+ const fromVersion = packageJson[name]
24
+ ? packageJson[name].migratedVersion
25
+ : undefined
26
+ if (!fromVersion && !isMonorepoSubpackage && !findGitDir()) {
21
27
  await execa('git', ['init'])
22
28
  await installGitHooks.run()
23
29
  }
24
- await migrateProjectPackageJson()
30
+ await migrateProjectPackageJson({ fromVersion })
25
31
  if (await hasYarnOrNpmLockfile()) {
26
32
  await execa('pnpm', ['import'])
27
33
  }
28
- await migrateConfigFiles()
29
- await migrateEslintConfigs()
30
- await migrateMoveTypeDefs()
31
- await migrateGitignore()
32
- await getPluginsAsyncFunction('migrate')(args)
34
+ await migrateConfigFiles({ fromVersion })
35
+ await migrateEslintConfigs({ fromVersion })
36
+ if (!fromVersion) await migrateMoveTypeDefs()
37
+ await migrateGitignore({ fromVersion })
38
+ await getPluginsAsyncFunction('migrate')(args, { fromVersion })
39
+
40
+ await writeMigratedVersion()
33
41
 
34
42
  if (!args.includes('--config-only')) {
35
43
  await execa('pnpm', [
@@ -6,6 +6,7 @@ const {
6
6
  monorepoSubpackageJsons,
7
7
  } = require('../util/findUps.cjs')
8
8
  const execa = require('../util/execa.cjs')
9
+ const writeMigratedVersion = require('../util/writeMigratedVersion.cjs')
9
10
  const { name } = require('../package.json')
10
11
 
11
12
  async function upgrade([version] = []) {
@@ -16,6 +17,9 @@ async function upgrade([version] = []) {
16
17
  .filter((pkg) => pkg.startsWith(`${name}-`))
17
18
  ),
18
19
  ]
20
+ if (!packageJson[name] || !packageJson[name].migratedVersion) {
21
+ await writeMigratedVersion()
22
+ }
19
23
  const isTest = Boolean(process.env.JCOREIO_TOOLCHAIN_SELF_TEST)
20
24
 
21
25
  if (!isTest && !version) {
@@ -0,0 +1,19 @@
1
+ const fs = require('../util/projectFs.cjs')
2
+ const { name, version: currentVersion } = require('../package.json')
3
+
4
+ module.exports = async function writeMigratedVersion() {
5
+ const packageJson = await fs.readJson('package.json')
6
+ if (packageJson[name] && packageJson[name].migratedVersion === currentVersion)
7
+ return
8
+ await fs.writeJson(
9
+ 'package.json',
10
+ {
11
+ ...packageJson,
12
+ [name]: {
13
+ ...packageJson[name],
14
+ migratedVersion: currentVersion,
15
+ },
16
+ },
17
+ { spaces: 2 }
18
+ )
19
+ }
@@ -1,43 +0,0 @@
1
- module.exports = [
2
- '.babelrc.js',
3
- '.babelrc.json',
4
- '.babelrc.mjs',
5
- '.babelrc',
6
- 'babel.config.cjs',
7
- 'babel.config.js',
8
- 'babel.config.json',
9
- 'babel.config.mjs',
10
- '.commitlintrc.js',
11
- '.commitlintrc.json',
12
- '.commitlintrc.yml',
13
- 'commitlint.config.js',
14
- 'husky.config.js',
15
- '.lintstagedrc',
16
- 'lint-staged.config.js',
17
- '.nycrc.json',
18
- '.nycrc.yaml',
19
- '.nycrc.yml',
20
- '.nycrc',
21
- 'nyc.config.js',
22
- '.prettierrc.cjs',
23
- '.prettierrc.js',
24
- '.prettierrc.json',
25
- '.prettierrc.json5',
26
- '.prettierrc.toml',
27
- '.prettierrc.yaml',
28
- '.prettierrc.yml',
29
- '.prettierrc',
30
- 'prettier.config.js',
31
- 'package-lock.json',
32
- '.github/renovate.json',
33
- '.github/renovate.json5',
34
- '.gitlab/renovate.json',
35
- '.gitlab/renovate.json5',
36
- '.renovaterc.json',
37
- '.renovaterc',
38
- 'renovate.json',
39
- 'renovate.json5',
40
- 'solano.yml',
41
- '.travis.yml',
42
- 'yarn.lock',
43
- ]