diff --git a/src/download.ts b/src/download.ts index a36701d..db72f62 100644 --- a/src/download.ts +++ b/src/download.ts @@ -381,10 +381,14 @@ export async function downloadToBlob(options: Omit 'nuxt-starter-k7spa3r4' + * + * // Also works with tilde URLs + * const projectId2 = parseUrl('https://stackblitz.com/~/edit/nuxt-starter-k7spa3r4') + * // => 'nuxt-starter-k7spa3r4' * ``` */ export function parseUrl(url: string): string { - const match = url.match(/stackblitz\.com\/edit\/([^/?#]+)/) + const match = url.match(/stackblitz\.com\/(?:~\/)?edit\/([^/?#]+)/) if (!match || !match[1]) { throw new Error(`Invalid StackBlitz URL: ${url}`) diff --git a/test/index.test.ts b/test/index.test.ts index 454f545..10bf448 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -104,6 +104,11 @@ describe('parseUrl', () => { expect(projectId).toBe('nuxt-starter-k7spa3r4') }) + it('handles URLs with tilde', () => { + const projectId = parseUrl('https://stackblitz.com/~/edit/nuxt-starter-k7spa3r4') + expect(projectId).toBe('nuxt-starter-k7spa3r4') + }) + it('throws error for invalid URL format', () => { expect(() => parseUrl('https://example.com/invalid')).toThrow('Invalid StackBlitz URL') })