mirror of
https://github.com/cypress-io/cypress.git
synced 2026-01-07 23:19:48 -06:00
* chore(deps): update dependency rimraf to v5.0.10 * fix: fix clean errors caused by rimraf breaking change * refactor: use promise instead of callback --------- Co-authored-by: Ryan Manuel <ryanm@cypress.io>
171 lines
4.6 KiB
TypeScript
171 lines
4.6 KiB
TypeScript
import inquirer from 'inquirer'
|
|
import path from 'path'
|
|
import fs from 'fs-extra'
|
|
import dedent from 'dedent'
|
|
|
|
import { monorepoPaths } from '../monorepoPaths'
|
|
|
|
export async function makePackage () {
|
|
const results = await inquirer.prompt<{
|
|
packageName: string
|
|
target: 'server'
|
|
description: string
|
|
scaffoldTests: boolean
|
|
}>([
|
|
{
|
|
name: 'packageName',
|
|
type: 'input',
|
|
message: 'What is the package name?',
|
|
validate: (val) => /[A-z\-]+/.test(val),
|
|
},
|
|
{
|
|
name: 'target',
|
|
type: 'list',
|
|
choices: ['server'], // TODO: 'frontend'
|
|
message: 'Where is the package targeting',
|
|
},
|
|
{
|
|
name: 'description',
|
|
type: 'input',
|
|
message: 'A brief description for the README.md',
|
|
},
|
|
{
|
|
name: 'scaffoldTests',
|
|
type: 'confirm',
|
|
message: 'Should we scaffold tests?',
|
|
},
|
|
])
|
|
|
|
const newDir = path.join(monorepoPaths.pkgDir, results.packageName)
|
|
|
|
await fs.ensureDir(path.join(newDir, 'src'))
|
|
|
|
if (results.scaffoldTests) {
|
|
await Promise.all([
|
|
fs.ensureDir(path.join(newDir, 'test/unit')),
|
|
fs.ensureDir(path.join(newDir, 'test/integration')),
|
|
])
|
|
}
|
|
|
|
await Promise.all([
|
|
fs.writeFile(
|
|
path.join(newDir, 'package.json'),
|
|
JSON.stringify(
|
|
{
|
|
name: `@packages/${results.packageName}`,
|
|
version: '0.0.0-development',
|
|
description: results.description,
|
|
'main': 'index.js',
|
|
'browser': 'src/index.ts',
|
|
'types': 'src/index.ts',
|
|
scripts: {
|
|
'build-prod': 'tsc || echo \'built, with errors\'',
|
|
'check-ts': 'tsc --noEmit',
|
|
'clean-deps': 'rimraf node_modules',
|
|
'clean': 'rimraf ./src/*.js ./src/**/*.js ./src/**/**/*.js ./test/**/*.js || echo \'cleaned\'',
|
|
...(results.scaffoldTests ? {
|
|
'test-unit': 'mocha -r @packages/ts/register test/unit/**/*.spec.ts --config ./test/.mocharc.js --exit',
|
|
'test-integration': 'mocha -r @packages/ts/register test/integration/**/*.spec.ts --config ./test/.mocharc.js --exit',
|
|
} : {}),
|
|
},
|
|
files: ['src'],
|
|
dependencies: {},
|
|
devDependencies: results.scaffoldTests ? {
|
|
'rimraf': '5.0.10',
|
|
'mocha': '7.0.1',
|
|
'chai': '4.2.0',
|
|
'@packages/ts': '0.0.0-development',
|
|
} : {
|
|
'rimraf': '5.0.10',
|
|
'@packages/ts': '0.0.0-development',
|
|
},
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
),
|
|
fs.writeFile(
|
|
path.join(newDir, 'tsconfig.json'),
|
|
JSON.stringify(
|
|
{
|
|
'extends': '../ts/tsconfig.json',
|
|
'include': ['src'],
|
|
'exclude': [
|
|
'test',
|
|
'script',
|
|
],
|
|
'compilerOptions': {
|
|
'strict': true,
|
|
'allowJs': false,
|
|
'rootDir': 'src',
|
|
'outDir': 'dist',
|
|
'noImplicitAny': true,
|
|
'resolveJsonModule': true,
|
|
'experimentalDecorators': true,
|
|
'noUncheckedIndexedAccess': true,
|
|
'importsNotUsedAsValues': 'error',
|
|
'types': [],
|
|
},
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
),
|
|
fs.writeFile(
|
|
path.join(newDir, 'README.md'),
|
|
`## @packages/${results.packageName}\n\n${results.description}`,
|
|
),
|
|
])
|
|
|
|
await Promise.all([
|
|
fs.writeFile(
|
|
path.join(newDir, 'index.js'),
|
|
dedent`
|
|
if (process.env.CYPRESS_INTERNAL_ENV !== 'production') {
|
|
require('@packages/ts/register')
|
|
}
|
|
|
|
module.exports = require('./src')
|
|
`,
|
|
),
|
|
fs.writeFile(
|
|
path.join(newDir, 'src/index.ts'),
|
|
`export * from './${results.packageName}'`,
|
|
),
|
|
fs.writeFile(
|
|
path.join(newDir, `src/${results.packageName}.ts`),
|
|
`export const stubPackage = {}`,
|
|
),
|
|
...(results.scaffoldTests ? [
|
|
fs.writeFile(
|
|
path.join(newDir, `test/.mocharc.js`),
|
|
'module.exports = {}\n',
|
|
),
|
|
fs.writeFile(
|
|
path.join(newDir, `test/unit/${results.packageName}.spec.ts`),
|
|
dedent`
|
|
import { expect } from 'chai'
|
|
|
|
describe('@packages/${results.packageName} unit', () => {
|
|
it('has a sample test', () => {
|
|
expect(1).to.eq(1)
|
|
})
|
|
})
|
|
`,
|
|
),
|
|
fs.writeFile(
|
|
path.join(newDir, `test/integration/${results.packageName}.spec.ts`),
|
|
dedent`
|
|
import { expect } from 'chai'
|
|
|
|
describe('@packages/${results.packageName} unit', () => {
|
|
it('has a sample test', () => {
|
|
expect(1).to.eq(1)
|
|
})
|
|
})
|
|
`,
|
|
),
|
|
] : []),
|
|
])
|
|
}
|