diff --git a/packages/cli/src/commands/plugin/diff/index.ts b/packages/cli/src/commands/plugin/diff/index.ts index 89e262ff38..b204924805 100644 --- a/packages/cli/src/commands/plugin/diff/index.ts +++ b/packages/cli/src/commands/plugin/diff/index.ts @@ -234,7 +234,8 @@ class PackageJsonHandler { } } -async function diffHandler(file: TemplateFile) { +// Make sure the file is an exact match of the template +async function exactMatchHandler(file: TemplateFile) { console.log(`Checking ${file.targetPath}`); const { targetPath, templateContents } = file; @@ -279,6 +280,26 @@ async function diffHandler(file: TemplateFile) { } } +// Adds the file if it is missing, but doesn't check existing files +async function addOnlyHandler(file: TemplateFile) { + console.log(`Making sure ${file.targetPath} exists`); + + const { targetPath, templateContents } = file; + const coloredPath = chalk.cyan(targetPath); + + if (!file.targetExists) { + const { addFile } = await inquirer.prompt({ + type: 'confirm', + name: 'addFile', + message: chalk.blue(`Missing ${coloredPath}, do you want to add it?`), + }); + if (addFile) { + await writeTargetFile(targetPath, templateContents); + } + return; + } +} + async function skipHandler(file: TemplateFile) { console.log(`Skipping ${file.targetPath}`); } @@ -294,11 +315,16 @@ const fileHandlers: FileHandler[] = [ handler: PackageJsonHandler.handler, }, { - patterns: ['.eslintrc.js', 'tsconfig.json'], - handler: diffHandler, + patterns: ['tsconfig.json'], + handler: exactMatchHandler, }, { - patterns: ['README.md', /^^src\//], + // make sure files in 1st level of src/ and dev/ exist + patterns: ['.eslintrc.js', /^(src|dev)\/[^/]+$/], + handler: addOnlyHandler, + }, + { + patterns: ['README.md', /^src\//], handler: skipHandler, }, ];