diff --git a/create-project.js b/create-project.js index 0180fdb..64befff 100644 --- a/create-project.js +++ b/create-project.js @@ -1,12 +1,15 @@ import { randomUUID } from 'crypto'; import { createWriteStream, existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'fs' +import fsExtra from 'fs-extra' 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' +const { copySync } = fsExtra; + const require = createRequire(import.meta.url) export async function createProject ({ dest, path, name }) { @@ -43,8 +46,21 @@ 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; + + if (!isSameFileSystemRoot) { + // if not, we need to copy the files instead of moving them + copySync(join(temp, 'package'), projectDir) + } else { + renameSync(join(temp, 'package'), projectDir) + } + // Clean up download unlinkSync(starterProjectArchive) diff --git a/package.json b/package.json index d9dd1eb..8b8c1af 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "tape": "^5.6.3" }, "dependencies": { + "fs-extra": "^11.1.1", "tar": "^6.1.14", "tiny-json-http": "^7.5.1" },