diff --git a/create-project.js b/create-project.js index 0180fdb..9c6faab 100644 --- a/create-project.js +++ b/create-project.js @@ -1,8 +1,8 @@ -import { randomUUID } from 'crypto'; -import { createWriteStream, existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'fs' +import { randomUUID } from 'crypto' +import { createWriteStream, existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync, cpSync, rmSync } from 'fs' import { createRequire } from 'module' import { tmpdir } from 'os' -import { isAbsolute, join, resolve } from 'path' +import { isAbsolute, join, resolve, parse } from 'path' import https from 'https' import tiny from 'tiny-json-http' import tar from 'tar' @@ -43,8 +43,23 @@ export async function createProject ({ dest, path, name }) { // Extract starter project tar.x({ C: temp, file: starterProjectArchive, sync: true }) + // Move starter project to final destination - renameSync(join(temp, 'package'), projectDir) + + // Check if the temp and projectDir are on the same file system + const tempRoot = parse(temp).root + const projectRoot = parse(projectDir).root + const isSameFileSystemRoot = tempRoot === projectRoot + const packageDir = join(temp, 'package') + + if (!isSameFileSystemRoot) { + // if not, we need to copy the files instead of moving them + cpSync(packageDir, projectDir, { recursive: true }) + rmSync(packageDir, { recursive: true }) + } else { + renameSync(packageDir, projectDir) + } + // Clean up download unlinkSync(starterProjectArchive)