mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
75 lines
2 KiB
JavaScript
75 lines
2 KiB
JavaScript
|
import minimist from 'minimist'
|
||
|
import { exec } from 'node:child_process'
|
||
|
import { promisify } from 'node:util'
|
||
|
import Runner from 'jscodeshift/src/Runner.js'
|
||
|
import { fileURLToPath } from 'node:url'
|
||
|
import path from 'node:path'
|
||
|
|
||
|
const __dirname = fileURLToPath(new URL('.', import.meta.url))
|
||
|
// use minimist to get a list of files from the argv
|
||
|
const argv = minimist(process.argv.slice(2), {
|
||
|
boolean: ['usage'],
|
||
|
})
|
||
|
|
||
|
function printUsage() {
|
||
|
console.log(
|
||
|
'node scripts/esm-migration/cjs-to-esm.mjs [files] [--format] [--lint] [--usage]'
|
||
|
)
|
||
|
console.log(
|
||
|
'WARNING: this will only work in local development as important dependencies will be missing in production'
|
||
|
)
|
||
|
console.log('Options:')
|
||
|
console.log(' files: a list of files to convert')
|
||
|
console.log('--format: run prettier to fix formatting')
|
||
|
console.log(' --lint: run eslint to fix linting')
|
||
|
console.log(' --usage: show this help message')
|
||
|
process.exit(0)
|
||
|
}
|
||
|
|
||
|
const files = argv._
|
||
|
|
||
|
if (argv.usage) {
|
||
|
printUsage()
|
||
|
}
|
||
|
|
||
|
if (!Array.isArray(files) || files.length === 0) {
|
||
|
console.error('You must provide a list of files to convert')
|
||
|
printUsage()
|
||
|
process.exit(1)
|
||
|
}
|
||
|
|
||
|
const promisifiedExec = promisify(exec)
|
||
|
|
||
|
const cjsTransform = fileURLToPath(
|
||
|
import.meta.resolve('5to6-codemod/transforms/cjs.js')
|
||
|
)
|
||
|
const exportsTransform = fileURLToPath(
|
||
|
import.meta.resolve('5to6-codemod/transforms/exports.js')
|
||
|
)
|
||
|
const overleafTransform = fileURLToPath(
|
||
|
import.meta.resolve('./overleaf-es-codemod.js')
|
||
|
)
|
||
|
|
||
|
const config = {
|
||
|
output: __dirname,
|
||
|
silent: true,
|
||
|
print: false,
|
||
|
verbose: 0,
|
||
|
hoist: true,
|
||
|
}
|
||
|
|
||
|
await Runner.run(cjsTransform, files, config)
|
||
|
await Runner.run(exportsTransform, files, config)
|
||
|
await Runner.run(overleafTransform, files, config)
|
||
|
|
||
|
const webRoot = fileURLToPath(new URL('../../', import.meta.url))
|
||
|
|
||
|
for (const file of files) {
|
||
|
// move files with git mv
|
||
|
await promisifiedExec(`git mv ${file} ${file.replace('.js', '.mjs')}`)
|
||
|
const relativePath = path.relative(webRoot, file)
|
||
|
console.log(
|
||
|
`transformed ${relativePath} and renamed it to have a .mjs extension`
|
||
|
)
|
||
|
}
|