diff options
Diffstat (limited to 'packages/integrations/vercel/src/lib/nft.ts')
-rw-r--r-- | packages/integrations/vercel/src/lib/nft.ts | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/packages/integrations/vercel/src/lib/nft.ts b/packages/integrations/vercel/src/lib/nft.ts new file mode 100644 index 000000000..d88429714 --- /dev/null +++ b/packages/integrations/vercel/src/lib/nft.ts @@ -0,0 +1,38 @@ +import * as fs from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; +import { nodeFileTrace } from '@vercel/nft'; + +export async function copyDependenciesToFunction( + root: URL, + functionFolder: URL, + serverEntry: string +) { + const entryPath = fileURLToPath(new URL(`./${serverEntry}`, functionFolder)); + + const result = await nodeFileTrace([entryPath], { + base: fileURLToPath(root), + }); + + for (const file of result.fileList) { + if (file.startsWith('.vercel/')) continue; + const origin = new URL(file, root); + const dest = new URL(file, functionFolder); + + const meta = await fs.stat(origin); + const isSymlink = (await fs.lstat(origin)).isSymbolicLink(); + + // Create directories recursively + if (meta.isDirectory() && !isSymlink) { + await fs.mkdir(new URL('..', dest), { recursive: true }); + } else { + await fs.mkdir(new URL('.', dest), { recursive: true }); + } + + if (isSymlink) { + const link = await fs.readlink(origin); + await fs.symlink(link, dest, meta.isDirectory() ? 'dir' : 'file'); + } else { + await fs.copyFile(origin, dest); + } + } +} |