diff --git a/packages/create/src/environment.ts b/packages/create/src/environment.ts index 2b955a51..3edbafcc 100644 --- a/packages/create/src/environment.ts +++ b/packages/create/src/environment.ts @@ -38,6 +38,12 @@ export function createDefaultEnvironment(): Environment { appendFile: async (path: string, contents: string) => { await mkdir(dirname(path), { recursive: true }) + if (existsSync(path)) { + const existing = await readFile(path, 'utf-8') + if (existing.length > 0) { + await appendFile(path, existing.endsWith('\n') ? '\n' : '\n\n') + } + } return appendFile(path, contents) }, copyFile: async (from: string, to: string) => { @@ -127,7 +133,13 @@ export function createMemoryEnvironment(returnPathsRelativeTo: string = '') { environment.appendFile = async (path: string, contents: string) => { fs.mkdirSync(dirname(path), { recursive: true }) - await fs.appendFileSync(path, contents) + if (fs.existsSync(path)) { + const existing = fs.readFileSync(path, 'utf-8') as string + if (existing.length > 0) { + fs.appendFileSync(path, existing.endsWith('\n') ? '\n' : '\n\n') + } + } + fs.appendFileSync(path, contents) } environment.copyFile = async (from: string, to: string) => { fs.mkdirSync(dirname(to), { recursive: true }) diff --git a/packages/create/src/frameworks/react/add-ons/mcp/assets/_dot_gitignore.append b/packages/create/src/frameworks/react/add-ons/mcp/assets/_dot_gitignore.append index ca0fbdf6..9553c628 100644 --- a/packages/create/src/frameworks/react/add-ons/mcp/assets/_dot_gitignore.append +++ b/packages/create/src/frameworks/react/add-ons/mcp/assets/_dot_gitignore.append @@ -1 +1 @@ -mcp-todos.json \ No newline at end of file +mcp-todos.json diff --git a/packages/create/src/frameworks/react/add-ons/sentry/assets/_dot_env.local.append b/packages/create/src/frameworks/react/add-ons/sentry/assets/_dot_env.local.append index fe0ffad2..40845b82 100644 --- a/packages/create/src/frameworks/react/add-ons/sentry/assets/_dot_env.local.append +++ b/packages/create/src/frameworks/react/add-ons/sentry/assets/_dot_env.local.append @@ -8,4 +8,4 @@ VITE_SENTRY_ORG= VITE_SENTRY_PROJECT= # Your Sentry authentication token (from your Sentry account) -SENTRY_AUTH_TOKEN= \ No newline at end of file +SENTRY_AUTH_TOKEN= diff --git a/packages/create/src/frameworks/react/add-ons/strapi/assets/_dot_env.local.append b/packages/create/src/frameworks/react/add-ons/strapi/assets/_dot_env.local.append index b7185238..5389eee7 100644 --- a/packages/create/src/frameworks/react/add-ons/strapi/assets/_dot_env.local.append +++ b/packages/create/src/frameworks/react/add-ons/strapi/assets/_dot_env.local.append @@ -1,2 +1,2 @@ # Strapi configuration -VITE_STRAPI_URL="http://localhost:1337" \ No newline at end of file +VITE_STRAPI_URL="http://localhost:1337" diff --git a/packages/create/src/frameworks/solid/add-ons/strapi/assets/_dot_env.local.append b/packages/create/src/frameworks/solid/add-ons/strapi/assets/_dot_env.local.append index d9791ecc..65df1092 100644 --- a/packages/create/src/frameworks/solid/add-ons/strapi/assets/_dot_env.local.append +++ b/packages/create/src/frameworks/solid/add-ons/strapi/assets/_dot_env.local.append @@ -1,2 +1,2 @@ # Strapi configuration -VITE_STRAPI_URL="http://localhost:1337/api" \ No newline at end of file +VITE_STRAPI_URL="http://localhost:1337/api" diff --git a/packages/create/tests/environment.test.ts b/packages/create/tests/environment.test.ts index b07ea2c8..3697cf1f 100644 --- a/packages/create/tests/environment.test.ts +++ b/packages/create/tests/environment.test.ts @@ -77,7 +77,7 @@ describe('createDefaultEnvironment', () => { await environment.copyFile('/test.txt', '/test2.txt') environment.finishRun() - expect(fs.readFileSync('/test.txt', 'utf8')).toEqual('testtest2') + expect(fs.readFileSync('/test.txt', 'utf8')).toEqual('test\n\ntest2') }) it('should allow deletes', async () => { diff --git a/packages/create/tests/filename-processing.test.ts b/packages/create/tests/filename-processing.test.ts index 8173856c..0f54fa1c 100644 --- a/packages/create/tests/filename-processing.test.ts +++ b/packages/create/tests/filename-processing.test.ts @@ -143,7 +143,7 @@ describe('Filename Processing - Prefix Stripping', () => { // File should be created with prefix stripped and content appended expect(output.files['/test/.env']).toBeDefined() - expect(output.files['/test/.env']).toEqual('BASE_VAR=value\n\nDATABASE_URL=postgresql://localhost:5432/mydb\n') + expect(output.files['/test/.env']).toEqual('BASE_VAR=value\n\n\nDATABASE_URL=postgresql://localhost:5432/mydb\n') }) it('should handle files without prefixes normally', async () => { diff --git a/packages/create/tests/template-file.test.ts b/packages/create/tests/template-file.test.ts index 3b813016..eac94857 100644 --- a/packages/create/tests/template-file.test.ts +++ b/packages/create/tests/template-file.test.ts @@ -51,7 +51,7 @@ describe('createTemplateFile', () => { await templateFile('test.txt.append', 'Line 2\n') environment.finishRun() - expect(output.files['/test/test.txt']).toEqual('Line 1\nLine 2\n') + expect(output.files['/test/test.txt']).toEqual('Line 1\n\nLine 2\n') }) it('should handle enabled add-ons', async () => {