From 718180f39f5335dc43547ff214971bc52f36ee12 Mon Sep 17 00:00:00 2001
From: btea <2356281422@qq.com>
Date: Tue, 11 Apr 2023 21:40:56 +0800
Subject: [PATCH 1/2] feat: if use playwright to add related extension
 recommendations

---
 index.ts | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/index.ts b/index.ts
index 6f912e1f..af602967 100755
--- a/index.ts
+++ b/index.ts
@@ -307,7 +307,13 @@ async function init() {
     const templateDir = path.resolve(templateRoot, templateName)
     renderTemplate(templateDir, root)
   }
-
+  const addPlaywrightExtensions = function addPlaywrightExtensions() {
+    const extensionDir = path.resolve(root, '.vscode/extensions.json')
+    const json = fs.readFileSync(extensionDir, 'utf-8')
+    const obj = JSON.parse(json)
+    obj.recommendations.push('ms-playwright.playwright')
+    fs.writeFileSync(path.resolve(root, '.vscode/extensions.json'), JSON.stringify(obj, null, 2))
+  }
   // Render base template
   render('base')
 
@@ -332,6 +338,7 @@ async function init() {
   }
   if (needsPlaywright) {
     render('config/playwright')
+    addPlaywrightExtensions()
   }
   if (needsTypeScript) {
     render('config/typescript')
@@ -447,7 +454,9 @@ async function init() {
   console.log(`\nDone. Now run:\n`)
   if (root !== cwd) {
     const cdProjectName = path.relative(cwd, root)
-    console.log(`  ${bold(green(`cd ${cdProjectName.includes(' ') ? `"${cdProjectName}"` : cdProjectName}`))}`)
+    console.log(
+      `  ${bold(green(`cd ${cdProjectName.includes(' ') ? `"${cdProjectName}"` : cdProjectName}`))}`
+    )
   }
   console.log(`  ${bold(green(getCommand(packageManager, 'install')))}`)
   if (needsPrettier) {

From d29309d8ed5c092f66a90466eb70eaa83b4b1408 Mon Sep 17 00:00:00 2001
From: btea <2356281422@qq.com>
Date: Thu, 4 May 2023 21:22:21 +0800
Subject: [PATCH 2/2] feat: playwright template add vscode folder

---
 index.ts                                           | 8 --------
 template/config/playwright/.vscode/extensions.json | 3 +++
 utils/renderTemplate.ts                            | 9 +++++++++
 3 files changed, 12 insertions(+), 8 deletions(-)
 create mode 100644 template/config/playwright/.vscode/extensions.json

diff --git a/index.ts b/index.ts
index af602967..36997386 100755
--- a/index.ts
+++ b/index.ts
@@ -307,13 +307,6 @@ async function init() {
     const templateDir = path.resolve(templateRoot, templateName)
     renderTemplate(templateDir, root)
   }
-  const addPlaywrightExtensions = function addPlaywrightExtensions() {
-    const extensionDir = path.resolve(root, '.vscode/extensions.json')
-    const json = fs.readFileSync(extensionDir, 'utf-8')
-    const obj = JSON.parse(json)
-    obj.recommendations.push('ms-playwright.playwright')
-    fs.writeFileSync(path.resolve(root, '.vscode/extensions.json'), JSON.stringify(obj, null, 2))
-  }
   // Render base template
   render('base')
 
@@ -338,7 +331,6 @@ async function init() {
   }
   if (needsPlaywright) {
     render('config/playwright')
-    addPlaywrightExtensions()
   }
   if (needsTypeScript) {
     render('config/typescript')
diff --git a/template/config/playwright/.vscode/extensions.json b/template/config/playwright/.vscode/extensions.json
new file mode 100644
index 00000000..7b3f8bda
--- /dev/null
+++ b/template/config/playwright/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+  "recommendations": ["ms-playwright.playwright"]
+}
diff --git a/utils/renderTemplate.ts b/utils/renderTemplate.ts
index 529b1f17..bbfe4008 100644
--- a/utils/renderTemplate.ts
+++ b/utils/renderTemplate.ts
@@ -41,6 +41,15 @@ function renderTemplate(src, dest) {
     return
   }
 
+  if (filename === 'extensions.json' && fs.existsSync(dest)) {
+    // merge instead of overwriting
+    const existing = JSON.parse(fs.readFileSync(dest, 'utf8'))
+    const newExtensions = JSON.parse(fs.readFileSync(src, 'utf8'))
+    const extensions = deepMerge(existing, newExtensions)
+    fs.writeFileSync(dest, JSON.stringify(extensions, null, 2) + '\n')
+    return
+  }
+
   if (filename.startsWith('_')) {
     // rename `_file` to `.file`
     dest = path.resolve(path.dirname(dest), filename.replace(/^_/, '.'))