diff --git a/.changeset/twelve-guests-sink.md b/.changeset/twelve-guests-sink.md new file mode 100644 index 0000000000..e44cd55680 --- /dev/null +++ b/.changeset/twelve-guests-sink.md @@ -0,0 +1,7 @@ +--- +"@workflow/core": patch +"@workflow/next": patch +"@workflow/web": patch +--- + +stop esbuild bundling for deferred step route in Next.js diff --git a/docs/package.json b/docs/package.json index a2b58f18e2..6b69bceacf 100644 --- a/docs/package.json +++ b/docs/package.json @@ -62,7 +62,7 @@ "mermaid": "^11.12.2", "motion": "^12.23.25", "nanoid": "5.1.6", - "next": "16.0.10", + "next": "16.1.6", "next-themes": "^0.4.6", "next-validate-link": "^1.6.3", "radix-ui": "latest", diff --git a/packages/builders/src/base-builder.ts b/packages/builders/src/base-builder.ts index e676b448cc..4e8ef35569 100644 --- a/packages/builders/src/base-builder.ts +++ b/packages/builders/src/base-builder.ts @@ -44,6 +44,38 @@ export abstract class BaseBuilder { this.config = config; } + /** + * Whether informational BaseBuilder logs should be printed. + * Subclasses can override this to silence progress logs while keeping warnings/errors. + */ + protected get shouldLogBaseBuilderInfo(): boolean { + return true; + } + + protected logBaseBuilderInfo(...args: unknown[]): void { + if (this.shouldLogBaseBuilderInfo) { + console.log(...args); + } + } + + private logCreateWorkflowsBundleInfo(...args: unknown[]): void { + if (!this.config.suppressCreateWorkflowsBundleLogs) { + this.logBaseBuilderInfo(...args); + } + } + + private logCreateWebhookBundleInfo(...args: unknown[]): void { + if (!this.config.suppressCreateWebhookBundleLogs) { + this.logBaseBuilderInfo(...args); + } + } + + private logCreateManifestInfo(...args: unknown[]): void { + if (!this.config.suppressCreateManifestLogs) { + this.logBaseBuilderInfo(...args); + } + } + /** * Performs the complete build process for workflows. * Subclasses must implement this to define their specific build steps. @@ -140,7 +172,7 @@ export abstract class BaseBuilder { }); } catch (_) {} - console.log( + this.logBaseBuilderInfo( `Discovering workflow directives`, `${Date.now() - discoverStart}ms` ); @@ -204,7 +236,10 @@ export abstract class BaseBuilder { private logEsbuildMessages( result: { errors?: any[]; warnings?: any[] }, phase: string, - throwOnError = true + throwOnError = true, + options?: { + suppressWarnings?: boolean; + } ): void { if (result.errors && result.errors.length > 0) { console.error(`❌ esbuild errors in ${phase}:`); @@ -226,7 +261,11 @@ export abstract class BaseBuilder { } } - if (result.warnings && result.warnings.length > 0) { + if ( + !options?.suppressWarnings && + result.warnings && + result.warnings.length > 0 + ) { console.warn(`! esbuild warnings in ${phase}:`); for (const warning of result.warnings) { console.warn(` ${warning.text}`); @@ -457,7 +496,10 @@ export abstract class BaseBuilder { const stepsResult = await esbuildCtx.rebuild(); this.logEsbuildMessages(stepsResult, 'steps bundle creation'); - console.log('Created steps bundle', `${Date.now() - stepsBundleStart}ms`); + this.logBaseBuilderInfo( + 'Created steps bundle', + `${Date.now() - stepsBundleStart}ms` + ); // Handle workflow-only files that may have been tree-shaken from the bundle. // These files have no steps, so esbuild removes them, but we still need their @@ -489,7 +531,7 @@ export abstract class BaseBuilder { } } catch (error) { // Log warning but continue - don't fail build for workflow-only file issues - console.log( + console.warn( `Warning: Failed to extract workflow metadata from ${workflowFile}:`, error instanceof Error ? error.message : String(error) ); @@ -659,8 +701,15 @@ export abstract class BaseBuilder { }); const interimBundle = await interimBundleCtx.rebuild(); - this.logEsbuildMessages(interimBundle, 'intermediate workflow bundle'); - console.log( + this.logEsbuildMessages( + interimBundle, + 'intermediate workflow bundle', + true, + { + suppressWarnings: this.config.suppressCreateWorkflowsBundleWarnings, + } + ); + this.logCreateWorkflowsBundleInfo( 'Created intermediate workflow bundle', `${Date.now() - bundleStartTime}ms` ); @@ -752,8 +801,15 @@ export const POST = workflowEntrypoint(workflowCode);`; external: ['@aws-sdk/credential-provider-web-identity'], }); - this.logEsbuildMessages(finalWorkflowResult, 'final workflow bundle'); - console.log( + this.logEsbuildMessages( + finalWorkflowResult, + 'final workflow bundle', + true, + { + suppressWarnings: this.config.suppressCreateWorkflowsBundleWarnings, + } + ); + this.logCreateWorkflowsBundleInfo( 'Created final workflow bundle', `${Date.now() - bundleStartTime}ms` ); @@ -782,8 +838,11 @@ export const POST = workflowEntrypoint(workflowCode);`; return; } - console.log('Generating a client library at', this.config.clientBundlePath); - console.log( + this.logBaseBuilderInfo( + 'Generating a client library at', + this.config.clientBundlePath + ); + this.logBaseBuilderInfo( 'NOTE: The recommended way to use workflow with a framework like NextJS is using the loader/plugin with webpack/turbobpack/rollup' ); @@ -885,7 +944,7 @@ export const POST = workflowEntrypoint(workflowCode);`; outfile: string; bundle?: boolean; }): Promise { - console.log('Creating webhook route'); + this.logCreateWebhookBundleInfo('Creating webhook route'); await mkdir(dirname(outfile), { recursive: true }); // Create a static route that calls resumeWebhook @@ -968,7 +1027,7 @@ export const OPTIONS = handler;`; }); this.logEsbuildMessages(result, 'webhook bundle creation'); - console.log( + this.logCreateWebhookBundleInfo( 'Created webhook bundle', `${Date.now() - webhookBundleStart}ms` ); @@ -1079,7 +1138,7 @@ export const OPTIONS = handler;`; manifest: WorkflowManifest; }): Promise { const buildStart = Date.now(); - console.log('Creating manifest...'); + this.logCreateManifestInfo('Creating manifest...'); try { const workflowGraphs = await extractWorkflowGraphs(workflowBundlePath); @@ -1110,7 +1169,7 @@ export const OPTIONS = handler;`; 0 ); - console.log( + this.logCreateManifestInfo( `Created manifest with ${stepCount} ${pluralize('step', 'steps', stepCount)}, ${workflowCount} ${pluralize('workflow', 'workflows', workflowCount)}, and ${classCount} ${pluralize('class', 'classes', classCount)}`, `${Date.now() - buildStart}ms` ); diff --git a/packages/builders/src/types.ts b/packages/builders/src/types.ts index a18741a438..070e881c66 100644 --- a/packages/builders/src/types.ts +++ b/packages/builders/src/types.ts @@ -28,6 +28,19 @@ interface BaseWorkflowConfig { // Optional prefix for debug files (e.g., "_" for Astro to ignore them) debugFilePrefix?: string; + // Suppress informational logs emitted by createWorkflowsBundle() + // (e.g. intermediate/final workflow bundle timing logs). + suppressCreateWorkflowsBundleLogs?: boolean; + + // Suppress esbuild warnings emitted by createWorkflowsBundle(). + suppressCreateWorkflowsBundleWarnings?: boolean; + + // Suppress informational logs emitted by createWebhookBundle(). + suppressCreateWebhookBundleLogs?: boolean; + + // Suppress informational logs emitted by createManifest(). + suppressCreateManifestLogs?: boolean; + // Node.js runtime version for Vercel Functions (e.g., "nodejs22.x", "nodejs24.x") runtime?: string; } diff --git a/packages/core/e2e/dev.test.ts b/packages/core/e2e/dev.test.ts index 48fe1fcf80..9dd214510f 100644 --- a/packages/core/e2e/dev.test.ts +++ b/packages/core/e2e/dev.test.ts @@ -125,11 +125,35 @@ export async function myNewStep() { ` ); restoreFiles.push({ path: stepFile, content }); + const copiedStepDir = path.join( + path.dirname(generatedStep), + '__workflow_step_files__' + ); while (true) { try { - const workflowContent = await fs.readFile(generatedStep, 'utf8'); - expect(workflowContent).toContain('myNewStep'); + const stepRouteContent = await fs.readFile(generatedStep, 'utf8'); + if (stepRouteContent.includes('myNewStep')) { + break; + } + + const copiedStepFileNames = await fs.readdir(copiedStepDir); + const copiedStepContents = await Promise.all( + copiedStepFileNames.map(async (copiedStepFileName) => { + const copiedStepFilePath = path.join( + copiedStepDir, + copiedStepFileName + ); + const copiedStepStats = await fs.stat(copiedStepFilePath); + if (!copiedStepStats.isFile()) { + return ''; + } + return await fs.readFile(copiedStepFilePath, 'utf8'); + }) + ); + expect( + copiedStepContents.some((content) => content.includes('myNewStep')) + ).toBe(true); break; } catch (_) { await new Promise((res) => setTimeout(res, 1_000)); diff --git a/packages/next/package.json b/packages/next/package.json index a5dee549eb..8e633f025b 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -41,10 +41,10 @@ "watchpack": "2.4.4" }, "devDependencies": { - "@workflow/tsconfig": "workspace:*", "@types/node": "catalog:", "@types/semver": "7.7.1", "@types/watchpack": "2.4.4", + "@workflow/tsconfig": "workspace:*", "next": "16.1.6" }, "peerDependencies": { diff --git a/packages/next/src/builder-deferred.ts b/packages/next/src/builder-deferred.ts index d9612ce42f..39c1358638 100644 --- a/packages/next/src/builder-deferred.ts +++ b/packages/next/src/builder-deferred.ts @@ -1,16 +1,45 @@ import { createHash } from 'node:crypto'; -import { constants } from 'node:fs'; -import { access, mkdir, readFile, stat, writeFile } from 'node:fs/promises'; +import { constants, existsSync, realpathSync } from 'node:fs'; +import { + access, + mkdir, + readdir, + readFile, + rm, + stat, + writeFile, +} from 'node:fs/promises'; import os from 'node:os'; -import { dirname, isAbsolute, join, resolve } from 'node:path'; +import { + basename, + dirname, + extname, + isAbsolute, + join, + relative, + resolve, +} from 'node:path'; import { createSocketServer, type SocketIO, type SocketServerConfig, } from './socket-server.js'; +import { + createDeferredStepCopyInlineSourceMapComment, + createDeferredStepSourceMetadataComment, + DEFERRED_STEP_COPY_DIR_NAME, +} from './step-copy-utils.js'; const ROUTE_STUB_FILE_MARKER = 'WORKFLOW_ROUTE_STUB_FILE'; +type WorkflowManifest = import('@workflow/builders').WorkflowManifest; + +interface DeferredDiscoveredEntries { + discoveredSteps: string[]; + discoveredWorkflows: string[]; + discoveredSerdeFiles: string[]; +} + let CachedNextBuilderDeferred: any; // Create the deferred Next builder dynamically by extending the ESM BaseBuilder. @@ -25,8 +54,11 @@ export async function getNextBuilderDeferred() { BaseBuilder: BaseBuilderClass, STEP_QUEUE_TRIGGER, WORKFLOW_QUEUE_TRIGGER, + applySwcTransform, detectWorkflowPatterns, + getImportPath, isWorkflowSdkFile, + resolveWorkflowAliasRelativePath, // biome-ignore lint/security/noGlobalEval: Need to use eval here to avoid TypeScript from transpiling the import statement into `require()` } = (await eval( 'import("@workflow/builders")' @@ -47,6 +79,7 @@ export async function getNextBuilderDeferred() { const outputDir = await this.findAppDirectory(); await this.initializeDiscoveryState(); + await this.cleanupGeneratedArtifactsOnBoot(outputDir); await this.writeStubFiles(outputDir); await this.createDiscoverySocketServer(); @@ -57,15 +90,8 @@ export async function getNextBuilderDeferred() { await this.validateDiscoveredEntryFiles(); const implicitStepFiles = await this.resolveImplicitStepFiles(); - const inputFiles = Array.from( - new Set([ - ...this.discoveredWorkflowFiles, - ...this.discoveredStepFiles, - ...implicitStepFiles, - ]) - ).sort(); const pendingBuild = this.deferredBuildQueue.then(() => - this.buildDeferredEntriesUntilStable(inputFiles, implicitStepFiles) + this.buildDeferredEntriesUntilStable(implicitStepFiles) ); // Keep the queue chain alive even when the current build fails so future @@ -78,8 +104,18 @@ export async function getNextBuilderDeferred() { await pendingBuild; } + private getCurrentInputFiles(implicitStepFiles: string[]): string[] { + return Array.from( + new Set([ + ...this.discoveredWorkflowFiles, + ...this.discoveredStepFiles, + ...this.discoveredSerdeFiles, + ...implicitStepFiles, + ]) + ).sort(); + } + private async buildDeferredEntriesUntilStable( - inputFiles: string[], implicitStepFiles: string[] ): Promise { // A successful build can discover additional transitive dependency files @@ -88,6 +124,7 @@ export async function getNextBuilderDeferred() { const maxBuildPasses = 3; for (let buildPass = 0; buildPass < maxBuildPasses; buildPass++) { + const inputFiles = this.getCurrentInputFiles(implicitStepFiles); const buildSignature = await this.createDeferredBuildSignature(inputFiles); if (buildSignature === this.lastDeferredBuildSignature) { @@ -117,8 +154,10 @@ export async function getNextBuilderDeferred() { return; } + const postBuildInputFiles = + this.getCurrentInputFiles(implicitStepFiles); const postBuildSignature = - await this.createDeferredBuildSignature(inputFiles); + await this.createDeferredBuildSignature(postBuildInputFiles); if (postBuildSignature === buildSignature) { return; } @@ -351,21 +390,44 @@ export async function getNextBuilderDeferred() { await mkdir(cacheDir, { recursive: true }); const manifestBuildDir = join(cacheDir, 'workflow-generated-manifest'); const tempRouteFileName = 'route.js.temp'; + const trackedDiscoveredEntries = + await this.collectTrackedDiscoveredEntries(); const discoveredStepFiles = Array.from( - new Set([...this.discoveredStepFiles, ...implicitStepFiles]) + new Set([ + ...this.discoveredStepFiles, + ...trackedDiscoveredEntries.discoveredSteps, + ...implicitStepFiles, + ]) ).sort(); const discoveredWorkflowFiles = Array.from( - this.discoveredWorkflowFiles + new Set([ + ...this.discoveredWorkflowFiles, + ...trackedDiscoveredEntries.discoveredWorkflows, + ]) ).sort(); - const trackedSerdeFiles = await this.collectTrackedSerdeFiles(); - const discoveredSerdeFiles = Array.from( - new Set([...this.discoveredSerdeFiles, ...trackedSerdeFiles]) + const discoveredSerdeFileCandidates = Array.from( + new Set([ + ...this.discoveredSerdeFiles, + ...trackedDiscoveredEntries.discoveredSerdeFiles, + ]) ).sort(); + const discoveredSerdeFiles = await this.collectTransitiveSerdeFiles({ + entryFiles: [...discoveredStepFiles, ...discoveredWorkflowFiles], + serdeFiles: discoveredSerdeFileCandidates, + }); const discoveredEntries = { discoveredSteps: discoveredStepFiles, discoveredWorkflows: discoveredWorkflowFiles, discoveredSerdeFiles, }; + const buildInputFiles = Array.from( + new Set([ + ...inputFiles, + ...discoveredStepFiles, + ...discoveredWorkflowFiles, + ...discoveredSerdeFiles, + ]) + ).sort(); // Ensure output directories exist await mkdir(workflowGeneratedDir, { recursive: true }); @@ -378,7 +440,7 @@ export async function getNextBuilderDeferred() { const tsconfigPath = await this.findTsConfigPath(); const options = { - inputFiles, + inputFiles: buildInputFiles, workflowGeneratedDir, tsconfigPath, routeFileName: tempRouteFileName, @@ -421,8 +483,13 @@ export async function getNextBuilderDeferred() { manifestDir: manifestBuildDir, manifest, }); - await this.rewriteJsonFileWithStableKeyOrder(manifestBuildPath); - await this.copyFileIfChanged(manifestBuildPath, manifestFilePath); + if (manifestJson) { + await this.rewriteJsonFileWithStableKeyOrder(manifestBuildPath); + await this.copyFileIfChanged(manifestBuildPath, manifestFilePath); + } else { + await rm(manifestBuildPath, { force: true }); + await rm(manifestFilePath, { force: true }); + } await this.writeFunctionsConfig(outputDir); @@ -457,6 +524,61 @@ export async function getNextBuilderDeferred() { this.socketIO?.emit('build-complete'); } + private async cleanupGeneratedArtifactsOnBoot( + outputDir: string + ): Promise { + const workflowGeneratedDir = join(outputDir, '.well-known/workflow/v1'); + const flowRouteDir = join(workflowGeneratedDir, 'flow'); + const stepRouteDir = join(workflowGeneratedDir, 'step'); + const webhookRouteDir = join(workflowGeneratedDir, 'webhook/[token]'); + + const staleArtifactPaths = [ + join(flowRouteDir, 'route.js.temp'), + join(flowRouteDir, 'route.js.temp.debug.json'), + join(flowRouteDir, 'route.js.debug.json'), + join(stepRouteDir, 'route.js.temp'), + join(stepRouteDir, 'route.js.temp.debug.json'), + join(stepRouteDir, 'route.js.debug.json'), + join(stepRouteDir, DEFERRED_STEP_COPY_DIR_NAME), + join(webhookRouteDir, 'route.js.temp'), + join(workflowGeneratedDir, 'manifest.json'), + ]; + + await Promise.all( + staleArtifactPaths.map((stalePath) => + rm(stalePath, { recursive: true, force: true }) + ) + ); + + await Promise.all([ + this.removeStaleDeferredTempFiles(flowRouteDir), + this.removeStaleDeferredTempFiles(stepRouteDir), + this.removeStaleDeferredTempFiles(webhookRouteDir), + ]); + } + + private async removeStaleDeferredTempFiles( + routeDir: string + ): Promise { + const routeEntries = await readdir(routeDir, { + withFileTypes: true, + }).catch(() => []); + await Promise.all( + routeEntries + .filter( + (entry) => + entry.isFile() && + entry.name.startsWith('route.js.') && + entry.name.endsWith('.tmp') + ) + .map((entry) => + rm(join(routeDir, entry.name), { + force: true, + }) + ) + ); + } + private async createDiscoverySocketServer(): Promise { if (this.socketIO || process.env.WORKFLOW_SOCKET_PORT) { return; @@ -573,19 +695,32 @@ export async function getNextBuilderDeferred() { return signatureHash.digest('hex'); } - private async collectTrackedSerdeFiles(): Promise { + private async collectTrackedDiscoveredEntries(): Promise<{ + discoveredSteps: string[]; + discoveredWorkflows: string[]; + discoveredSerdeFiles: string[]; + }> { if (this.trackedDependencyFiles.size === 0) { - return []; + return { + discoveredSteps: [], + discoveredWorkflows: [], + discoveredSerdeFiles: [], + }; } - const { serdeFiles } = await this.reconcileDiscoveredEntries({ - workflowCandidates: [], - stepCandidates: [], - serdeCandidates: this.trackedDependencyFiles, - validatePatterns: true, - }); + const { workflowFiles, stepFiles, serdeFiles } = + await this.reconcileDiscoveredEntries({ + workflowCandidates: this.trackedDependencyFiles, + stepCandidates: this.trackedDependencyFiles, + serdeCandidates: this.trackedDependencyFiles, + validatePatterns: true, + }); - return Array.from(serdeFiles); + return { + discoveredSteps: Array.from(stepFiles).sort(), + discoveredWorkflows: Array.from(workflowFiles).sort(), + discoveredSerdeFiles: Array.from(serdeFiles).sort(), + }; } private async refreshTrackedDependencyFiles( @@ -918,39 +1053,722 @@ export async function getNextBuilderDeferred() { } } + private mergeWorkflowManifest( + target: WorkflowManifest, + source: WorkflowManifest + ): void { + if (source.steps) { + target.steps = Object.assign(target.steps || {}, source.steps); + } + if (source.workflows) { + target.workflows = Object.assign( + target.workflows || {}, + source.workflows + ); + } + if (source.classes) { + target.classes = Object.assign(target.classes || {}, source.classes); + } + } + + private async getRelativeFilenameForSwc(filePath: string): Promise { + const workingDir = this.config.workingDir; + const normalizedWorkingDir = workingDir + .replace(/\\/g, '/') + .replace(/\/$/, ''); + const normalizedFilepath = filePath.replace(/\\/g, '/'); + + // Windows fix: Use case-insensitive comparison to work around drive letter casing issues. + const lowerWd = normalizedWorkingDir.toLowerCase(); + const lowerPath = normalizedFilepath.toLowerCase(); + + let relativeFilename: string; + if (lowerPath.startsWith(`${lowerWd}/`)) { + relativeFilename = normalizedFilepath.substring( + normalizedWorkingDir.length + 1 + ); + } else if (lowerPath === lowerWd) { + relativeFilename = '.'; + } else { + relativeFilename = relative(workingDir, filePath).replace(/\\/g, '/'); + if (relativeFilename.startsWith('../')) { + const aliasedRelativePath = await resolveWorkflowAliasRelativePath( + filePath, + workingDir + ); + if (aliasedRelativePath) { + relativeFilename = aliasedRelativePath; + } else { + relativeFilename = relativeFilename + .split('/') + .filter((part) => part !== '..') + .join('/'); + } + } + } + + if (relativeFilename.includes(':') || relativeFilename.startsWith('/')) { + relativeFilename = basename(normalizedFilepath); + } + + return relativeFilename; + } + + private getRelativeImportSpecifier( + fromFilePath: string, + toFilePath: string + ): string { + let relativePath = relative(dirname(fromFilePath), toFilePath).replace( + /\\/g, + '/' + ); + if (!relativePath.startsWith('.')) { + relativePath = `./${relativePath}`; + } + return relativePath; + } + + private getStepCopyFileName(filePath: string): string { + const normalizedPath = filePath.replace(/\\/g, '/'); + const hash = createHash('sha256').update(normalizedPath).digest('hex'); + const extension = extname(normalizedPath); + return `${hash.slice(0, 16)}${extension || '.js'}`; + } + + private rewriteCopiedStepImportSpecifier( + specifier: string, + sourceFilePath: string, + copiedFilePath: string, + copiedStepFileBySourcePath: Map + ): string { + if (!specifier.startsWith('.')) { + return specifier; + } + + const specifierMatch = specifier.match(/^([^?#]+)(.*)$/); + const importPath = specifierMatch?.[1] ?? specifier; + const suffix = specifierMatch?.[2] ?? ''; + const absoluteTargetPath = resolve(dirname(sourceFilePath), importPath); + const resolvedTargetPath = + this.resolveCopiedStepImportTargetPath(absoluteTargetPath); + const normalizedTargetPath = resolvedTargetPath.replace(/\\/g, '/'); + const copiedTargetPath = + copiedStepFileBySourcePath.get(normalizedTargetPath) || + (() => { + try { + const realTargetPath = realpathSync(resolvedTargetPath).replace( + /\\/g, + '/' + ); + return copiedStepFileBySourcePath.get(realTargetPath); + } catch { + return undefined; + } + })(); + let rewrittenPath = relative( + dirname(copiedFilePath), + copiedTargetPath || resolvedTargetPath + ).replace(/\\/g, '/'); + if (!rewrittenPath.startsWith('.')) { + rewrittenPath = `./${rewrittenPath}`; + } + return `${rewrittenPath}${suffix}`; + } + + private resolveCopiedStepImportTargetPath(targetPath: string): string { + if (existsSync(targetPath)) { + return targetPath; + } + + const extensionMatch = targetPath.match(/(\.[^./\\]+)$/); + const extension = extensionMatch?.[1]?.toLowerCase(); + if (!extension) { + return targetPath; + } + + const extensionFallbacks = + extension === '.js' + ? ['.ts', '.tsx', '.mts', '.cts'] + : extension === '.mjs' + ? ['.mts'] + : extension === '.cjs' + ? ['.cts'] + : extension === '.jsx' + ? ['.tsx'] + : []; + + if (extensionFallbacks.length === 0) { + return targetPath; + } + + const targetWithoutExtension = targetPath.slice(0, -extension.length); + for (const fallbackExtension of extensionFallbacks) { + const fallbackPath = `${targetWithoutExtension}${fallbackExtension}`; + if (existsSync(fallbackPath)) { + return fallbackPath; + } + } + + return targetPath; + } + + private rewriteRelativeImportsForCopiedStep( + source: string, + sourceFilePath: string, + copiedFilePath: string, + copiedStepFileBySourcePath: Map + ): string { + const rewriteSpecifier = (specifier: string) => + this.rewriteCopiedStepImportSpecifier( + specifier, + sourceFilePath, + copiedFilePath, + copiedStepFileBySourcePath + ); + const rewritePattern = (currentSource: string, pattern: RegExp): string => + currentSource.replace( + pattern, + (_match, prefix: string, specifier: string, suffix: string) => + `${prefix}${rewriteSpecifier(specifier)}${suffix}` + ); + + let rewrittenSource = source; + rewrittenSource = rewritePattern( + rewrittenSource, + /(from\s+['"])([^'"]+)(['"])/g + ); + rewrittenSource = rewritePattern( + rewrittenSource, + /(import\s+['"])([^'"]+)(['"])/g + ); + rewrittenSource = rewritePattern( + rewrittenSource, + /(import\(\s*['"])([^'"]+)(['"]\s*\))/g + ); + rewrittenSource = rewritePattern( + rewrittenSource, + /(require\(\s*['"])([^'"]+)(['"]\s*\))/g + ); + return rewrittenSource; + } + + private extractRelativeImportSpecifiers(source: string): string[] { + const relativeSpecifiers = new Set(); + const importPatterns = [ + /from\s+['"]([^'"]+)['"]/g, + /import\s+['"]([^'"]+)['"]/g, + /import\(\s*['"]([^'"]+)['"]\s*\)/g, + /require\(\s*['"]([^'"]+)['"]\s*\)/g, + ]; + + for (const importPattern of importPatterns) { + for (const match of source.matchAll(importPattern)) { + const specifier = match[1]; + if (specifier?.startsWith('.')) { + relativeSpecifiers.add(specifier); + } + } + } + + return Array.from(relativeSpecifiers); + } + + private shouldSkipTransitiveStepFile(filePath: string): boolean { + const normalizedPath = filePath.replace(/\\/g, '/'); + return ( + normalizedPath.includes('/.well-known/workflow/') || + normalizedPath.includes('/.next/') || + normalizedPath.includes('/node_modules/') || + normalizedPath.includes('/.pnpm/') + ); + } + + private async resolveTransitiveStepImportTargetPath( + sourceFilePath: string, + specifier: string + ): Promise { + const specifierMatch = specifier.match(/^([^?#]+)(.*)$/); + const importPath = specifierMatch?.[1] ?? specifier; + const absoluteTargetPath = resolve(dirname(sourceFilePath), importPath); + + const candidatePaths = new Set([ + this.resolveCopiedStepImportTargetPath(absoluteTargetPath), + ]); + + if (!extname(absoluteTargetPath)) { + const extensionCandidates = [ + '.ts', + '.tsx', + '.mts', + '.cts', + '.js', + '.jsx', + '.mjs', + '.cjs', + ]; + for (const extensionCandidate of extensionCandidates) { + candidatePaths.add(`${absoluteTargetPath}${extensionCandidate}`); + candidatePaths.add( + join(absoluteTargetPath, `index${extensionCandidate}`) + ); + } + } + + for (const candidatePath of candidatePaths) { + const resolvedPath = + this.resolveCopiedStepImportTargetPath(candidatePath); + const normalizedResolvedPath = + this.normalizeDiscoveredFilePath(resolvedPath); + + if (this.shouldSkipTransitiveStepFile(normalizedResolvedPath)) { + continue; + } + + try { + const fileStats = await stat(normalizedResolvedPath); + if (fileStats.isFile()) { + return normalizedResolvedPath; + } + } catch { + // Try the next candidate path. + } + } + + return null; + } + + private async collectTransitiveStepFiles( + stepFiles: string[] + ): Promise { + const normalizedStepFiles = Array.from( + new Set( + stepFiles.map((stepFile) => + this.normalizeDiscoveredFilePath(stepFile) + ) + ) + ).sort(); + const discoveredStepFiles = new Set(normalizedStepFiles); + const queuedFiles = [...normalizedStepFiles]; + const visitedFiles = new Set(); + const sourceCache = new Map(); + const patternCache = new Map< + string, + ReturnType | null + >(); + + const getSource = async (filePath: string): Promise => { + if (sourceCache.has(filePath)) { + return sourceCache.get(filePath) ?? null; + } + try { + const source = await readFile(filePath, 'utf-8'); + sourceCache.set(filePath, source); + return source; + } catch { + sourceCache.set(filePath, null); + return null; + } + }; + + const getPatterns = async ( + filePath: string + ): Promise | null> => { + if (patternCache.has(filePath)) { + return patternCache.get(filePath) ?? null; + } + const source = await getSource(filePath); + if (source === null) { + patternCache.set(filePath, null); + return null; + } + const patterns = detectWorkflowPatterns(source); + patternCache.set(filePath, patterns); + return patterns; + }; + + while (queuedFiles.length > 0) { + const currentFile = queuedFiles.pop(); + if (!currentFile || visitedFiles.has(currentFile)) { + continue; + } + visitedFiles.add(currentFile); + + const currentSource = await getSource(currentFile); + if (currentSource === null) { + continue; + } + + const relativeImportSpecifiers = + this.extractRelativeImportSpecifiers(currentSource); + for (const specifier of relativeImportSpecifiers) { + const resolvedImportPath = + await this.resolveTransitiveStepImportTargetPath( + currentFile, + specifier + ); + if (!resolvedImportPath) { + continue; + } + + if (!visitedFiles.has(resolvedImportPath)) { + queuedFiles.push(resolvedImportPath); + } + + const importPatterns = await getPatterns(resolvedImportPath); + if (importPatterns?.hasUseStep) { + discoveredStepFiles.add(resolvedImportPath); + } + } + } + + return Array.from(discoveredStepFiles).sort(); + } + + private async collectTransitiveSerdeFiles({ + entryFiles, + serdeFiles, + }: { + entryFiles: string[]; + serdeFiles: string[]; + }): Promise { + const normalizedEntryFiles = Array.from( + new Set( + entryFiles.map((entryFile) => + this.normalizeDiscoveredFilePath(entryFile) + ) + ) + ).sort(); + const discoveredSerdeFiles = new Set( + serdeFiles.map((serdeFile) => + this.normalizeDiscoveredFilePath(serdeFile) + ) + ); + const queuedFiles = Array.from( + new Set([...normalizedEntryFiles, ...discoveredSerdeFiles]) + ); + const visitedFiles = new Set(); + const sourceCache = new Map(); + const patternCache = new Map< + string, + ReturnType | null + >(); + + const getSource = async (filePath: string): Promise => { + if (sourceCache.has(filePath)) { + return sourceCache.get(filePath) ?? null; + } + try { + const source = await readFile(filePath, 'utf-8'); + sourceCache.set(filePath, source); + return source; + } catch { + sourceCache.set(filePath, null); + return null; + } + }; + + const getPatterns = async ( + filePath: string + ): Promise | null> => { + if (patternCache.has(filePath)) { + return patternCache.get(filePath) ?? null; + } + const source = await getSource(filePath); + if (source === null) { + patternCache.set(filePath, null); + return null; + } + const patterns = detectWorkflowPatterns(source); + patternCache.set(filePath, patterns); + return patterns; + }; + + while (queuedFiles.length > 0) { + const currentFile = queuedFiles.pop(); + if (!currentFile || visitedFiles.has(currentFile)) { + continue; + } + visitedFiles.add(currentFile); + + const currentSource = await getSource(currentFile); + if (currentSource === null) { + continue; + } + + const relativeImportSpecifiers = + this.extractRelativeImportSpecifiers(currentSource); + for (const specifier of relativeImportSpecifiers) { + const resolvedImportPath = + await this.resolveTransitiveStepImportTargetPath( + currentFile, + specifier + ); + if (!resolvedImportPath) { + continue; + } + + if (!visitedFiles.has(resolvedImportPath)) { + queuedFiles.push(resolvedImportPath); + } + + const importPatterns = await getPatterns(resolvedImportPath); + if ( + importPatterns?.hasSerde && + !isWorkflowSdkFile(resolvedImportPath) + ) { + discoveredSerdeFiles.add(resolvedImportPath); + } + } + } + + return Array.from(discoveredSerdeFiles).sort(); + } + + private resolveBuiltInStepFilePath(): string | null { + try { + return this.normalizeDiscoveredFilePath( + require.resolve('workflow/internal/builtins', { + paths: [this.config.workingDir], + }) + ); + } catch { + return null; + } + } + + private async copyDiscoveredStepFiles({ + stepFiles, + stepsRouteDir, + }: { + stepFiles: string[]; + stepsRouteDir: string; + }): Promise { + const copiedStepsDir = join(stepsRouteDir, DEFERRED_STEP_COPY_DIR_NAME); + await mkdir(copiedStepsDir, { recursive: true }); + + const normalizedStepFiles = Array.from( + new Set( + stepFiles.map((stepFile) => + this.normalizeDiscoveredFilePath(stepFile) + ) + ) + ).sort(); + const copiedStepFileBySourcePath = new Map(); + const expectedFileNames = new Set(); + const copiedStepFiles: string[] = []; + + for (const normalizedStepFile of normalizedStepFiles) { + const copiedFileName = this.getStepCopyFileName(normalizedStepFile); + const copiedFilePath = join(copiedStepsDir, copiedFileName); + const normalizedPathKey = normalizedStepFile.replace(/\\/g, '/'); + copiedStepFileBySourcePath.set(normalizedPathKey, copiedFilePath); + try { + const realPathKey = realpathSync(normalizedStepFile).replace( + /\\/g, + '/' + ); + copiedStepFileBySourcePath.set(realPathKey, copiedFilePath); + } catch { + // Keep best-effort mapping when source cannot be realpath-resolved. + } + expectedFileNames.add(copiedFileName); + copiedStepFiles.push(copiedFilePath); + } + + for (const normalizedStepFile of normalizedStepFiles) { + const source = await readFile(normalizedStepFile, 'utf-8'); + const copiedFilePath = copiedStepFileBySourcePath.get( + normalizedStepFile.replace(/\\/g, '/') + ); + if (!copiedFilePath) { + continue; + } + const rewrittenSource = this.rewriteRelativeImportsForCopiedStep( + source, + normalizedStepFile, + copiedFilePath, + copiedStepFileBySourcePath + ); + const metadataComment = createDeferredStepSourceMetadataComment({ + relativeFilename: + await this.getRelativeFilenameForSwc(normalizedStepFile), + absolutePath: normalizedStepFile.replace(/\\/g, '/'), + }); + const sourceMapComment = createDeferredStepCopyInlineSourceMapComment({ + sourcePath: normalizedStepFile, + sourceContent: source, + generatedContent: rewrittenSource, + }); + const copiedSource = `${metadataComment}\n${rewrittenSource}\n${sourceMapComment}`; + + await this.writeFileIfChanged(copiedFilePath, copiedSource); + } + + const existingEntries = await readdir(copiedStepsDir, { + withFileTypes: true, + }).catch(() => []); + await Promise.all( + existingEntries + .filter((entry) => !expectedFileNames.has(entry.name)) + .map((entry) => + rm(join(copiedStepsDir, entry.name), { + recursive: true, + force: true, + }) + ) + ); + + return copiedStepFiles; + } + + private async createDeferredStepsManifest({ + stepFiles, + workflowFiles, + serdeOnlyFiles, + }: { + stepFiles: string[]; + workflowFiles: string[]; + serdeOnlyFiles: string[]; + }): Promise { + const workflowManifest: WorkflowManifest = {}; + const filesForStepTransform = Array.from( + new Set([...stepFiles, ...serdeOnlyFiles]) + ).sort(); + + await Promise.all( + filesForStepTransform.map(async (stepFile) => { + const source = await readFile(stepFile, 'utf-8'); + const relativeFilename = + await this.getRelativeFilenameForSwc(stepFile); + const { workflowManifest: fileManifest } = await applySwcTransform( + relativeFilename, + source, + 'step', + stepFile + ); + this.mergeWorkflowManifest(workflowManifest, fileManifest); + }) + ); + + const stepFileSet = new Set(stepFiles); + const workflowOnlyFiles = workflowFiles + .filter((workflowFile) => !stepFileSet.has(workflowFile)) + .sort(); + await Promise.all( + workflowOnlyFiles.map(async (workflowFile) => { + try { + const source = await readFile(workflowFile, 'utf-8'); + const relativeFilename = + await this.getRelativeFilenameForSwc(workflowFile); + const { workflowManifest: fileManifest } = await applySwcTransform( + relativeFilename, + source, + 'workflow', + workflowFile + ); + this.mergeWorkflowManifest(workflowManifest, { + workflows: fileManifest.workflows, + classes: fileManifest.classes, + }); + } catch (error) { + console.log( + `Warning: Failed to extract workflow metadata from ${workflowFile}:`, + error instanceof Error ? error.message : String(error) + ); + } + }) + ); + + return workflowManifest; + } + private async buildStepsFunction({ - inputFiles, workflowGeneratedDir, - tsconfigPath, routeFileName = 'route.js', discoveredEntries, }: { - inputFiles: string[]; workflowGeneratedDir: string; - tsconfigPath?: string; routeFileName?: string; - discoveredEntries?: { - discoveredSteps: string[]; - discoveredWorkflows: string[]; - discoveredSerdeFiles: string[]; - }; + discoveredEntries: DeferredDiscoveredEntries; }) { - // Create steps bundle const stepsRouteDir = join(workflowGeneratedDir, 'step'); await mkdir(stepsRouteDir, { recursive: true }); - return await this.createStepsBundle({ - // If any dynamic requires are used when bundling with ESM - // esbuild will create a too dynamic wrapper around require - // which turbopack/webpack fail to analyze. If we externalize - // correctly this shouldn't be an issue although we might want - // to use cjs as alternative to avoid - format: 'esm', - inputFiles, - outfile: join(stepsRouteDir, routeFileName), - externalizeNonSteps: true, - tsconfigPath, - discoveredEntries, + const discovered = discoveredEntries; + const stepFiles = await this.collectTransitiveStepFiles( + [...discovered.discoveredSteps].sort() + ); + const workflowFiles = [...discovered.discoveredWorkflows].sort(); + const serdeFiles = [...discovered.discoveredSerdeFiles].sort(); + const stepFileSet = new Set(stepFiles); + const serdeOnlyFiles = serdeFiles.filter( + (file) => !stepFileSet.has(file) + ); + const builtInStepFilePath = this.resolveBuiltInStepFilePath(); + const copiedStepSourceFiles = builtInStepFilePath + ? [ + builtInStepFilePath, + ...stepFiles.filter((stepFile) => stepFile !== builtInStepFilePath), + ] + : stepFiles; + const copiedStepFiles = await this.copyDiscoveredStepFiles({ + stepFiles: copiedStepSourceFiles, + stepsRouteDir, }); + + const stepRouteFile = join(stepsRouteDir, routeFileName); + const copiedStepImports = copiedStepFiles + .map((copiedStepFile) => { + const importSpecifier = this.getRelativeImportSpecifier( + stepRouteFile, + copiedStepFile + ); + return `import '${importSpecifier}';`; + }) + .join('\n'); + const serdeImports = serdeOnlyFiles + .map((serdeFile) => { + const normalizedSerdeFile = + this.normalizeDiscoveredFilePath(serdeFile); + const { importPath, isPackage } = getImportPath( + normalizedSerdeFile, + this.config.workingDir + ); + if (isPackage) { + return `import '${importPath}';`; + } + const importSpecifier = this.getRelativeImportSpecifier( + stepRouteFile, + normalizedSerdeFile + ); + return `import '${importSpecifier}';`; + }) + .join('\n'); + + const routeContents = [ + '// biome-ignore-all lint: generated file', + '/* eslint-disable */', + builtInStepFilePath ? '' : "import 'workflow/internal/builtins';", + copiedStepImports, + serdeImports + ? `// Serde files for cross-context class registration\n${serdeImports}` + : '', + "export { stepEntrypoint as POST } from 'workflow/runtime';", + ] + .filter(Boolean) + .join('\n'); + + await this.writeFileIfChanged(stepRouteFile, routeContents); + + const manifest = await this.createDeferredStepsManifest({ + stepFiles: copiedStepSourceFiles, + workflowFiles, + serdeOnlyFiles, + }); + + return { + context: undefined, + manifest, + }; } private async buildWorkflowsFunction({ @@ -964,11 +1782,7 @@ export async function getNextBuilderDeferred() { workflowGeneratedDir: string; tsconfigPath?: string; routeFileName?: string; - discoveredEntries?: { - discoveredSteps: string[]; - discoveredWorkflows: string[]; - discoveredSerdeFiles: string[]; - }; + discoveredEntries: DeferredDiscoveredEntries; }) { const workflowsRouteDir = join(workflowGeneratedDir, 'flow'); await mkdir(workflowsRouteDir, { recursive: true }); diff --git a/packages/next/src/index.ts b/packages/next/src/index.ts index 37f4ef382b..5aac86e6a5 100644 --- a/packages/next/src/index.ts +++ b/packages/next/src/index.ts @@ -90,6 +90,10 @@ export function withWorkflow( workflowsBundlePath: '', // not used in base stepsBundlePath: '', // not used in base webhookBundlePath: '', // node used in base + suppressCreateWorkflowsBundleLogs: useDeferredBuilder, + suppressCreateWorkflowsBundleWarnings: useDeferredBuilder, + suppressCreateWebhookBundleLogs: useDeferredBuilder, + suppressCreateManifestLogs: useDeferredBuilder, externalPackages: [ // server-only and client-only are pseudo-packages handled by Next.js // during its build process. We mark them as external to prevent esbuild diff --git a/packages/next/src/loader.ts b/packages/next/src/loader.ts index 6b4ffe9fe7..9ee7d0ecc4 100644 --- a/packages/next/src/loader.ts +++ b/packages/next/src/loader.ts @@ -2,6 +2,12 @@ import { connect, type Socket } from 'node:net'; import { relative } from 'node:path'; import { transform } from '@swc/core'; import { type SocketMessage, serializeMessage } from './socket-server.js'; +import { + DEFERRED_STEP_SOURCE_METADATA_PREFIX, + isDeferredStepCopyFilePath, + parseInlineSourceMapComment, + parseDeferredStepSourceMetadata, +} from './step-copy-utils.js'; type DecoratorOptions = import('@workflow/builders').DecoratorOptions; type WorkflowPatternMatch = import('@workflow/builders').WorkflowPatternMatch; @@ -231,55 +237,10 @@ async function resolveWorkflowAliasPath( return resolveWorkflowAliasRelativePath(filePath, workingDir); } -// This loader applies the "use workflow"/"use step" -// client transformation -export default async function workflowLoader( - this: { - resourcePath: string; - }, - source: string | Buffer, - sourceMap: any +async function getRelativeFilenameForSwc( + filename: string, + workingDir: string ): Promise { - const filename = this.resourcePath; - const normalizedSource = source.toString(); - - // Skip generated workflow route files to avoid re-processing them - if (await checkGeneratedFile(filename)) { - return normalizedSource; - } - - // Detect workflow patterns in the source code - const patterns = await detectPatterns(normalizedSource); - // Always notify discovery tracking, even for `false/false`, so files that - // previously had workflow/step usage are removed from the tracked sets. - await notifySocketServer( - filename, - patterns.hasUseWorkflow, - patterns.hasUseStep, - patterns.hasSerde - ); - - // For @workflow SDK packages, only transform files with actual directives, - // not files that just match serde patterns (which are internal SDK implementation files) - const isSdkFile = await checkSdkFile(filename); - if (isSdkFile && !patterns.hasDirective) { - return normalizedSource; - } - - // Check if file needs transformation based on patterns and path - if (!(await checkShouldTransform(filename, patterns))) { - return normalizedSource; - } - - const isTypeScript = - filename.endsWith('.ts') || - filename.endsWith('.tsx') || - filename.endsWith('.mts') || - filename.endsWith('.cts'); - - // Calculate relative filename for SWC plugin - // The SWC plugin uses filename to generate workflowId, so it must be relative - const workingDir = process.cwd(); const normalizedWorkingDir = workingDir .replace(/\\/g, '/') .replace(/\/$/, ''); @@ -290,7 +251,7 @@ export default async function workflowLoader( const lowerPath = normalizedFilepath.toLowerCase(); let relativeFilename: string; - if (lowerPath.startsWith(lowerWd + '/')) { + if (lowerPath.startsWith(`${lowerWd}/`)) { // File is under working directory - manually calculate relative path relativeFilename = normalizedFilepath.substring( normalizedWorkingDir.length + 1 @@ -324,51 +285,165 @@ export default async function workflowLoader( relativeFilename = normalizedFilepath.split('/').pop() || 'unknown.ts'; } - // Get decorator options from tsconfig (cached per working directory) - const decoratorOptions = await getDecoratorOptions(workingDir); - - // Resolve module specifier for packages (node_modules or workspace packages) - const moduleSpecifier = await getModuleSpecifier(filename, workingDir); - - // Transform with SWC - const result = await transform(normalizedSource, { - filename: relativeFilename, - jsc: { - parser: { - ...(isTypeScript - ? { - syntax: 'typescript', - tsx: filename.endsWith('.tsx'), - decorators: decoratorOptions.decorators, - } - : { - syntax: 'ecmascript', - jsx: filename.endsWith('.jsx'), - decorators: decoratorOptions.decorators, - }), - }, - target: 'es2022', - experimental: { - plugins: [ - [ - require.resolve('@workflow/swc-plugin'), - { mode: 'client', moduleSpecifier }, + return relativeFilename; +} + +function stripDeferredStepSourceMetadataComment(source: string): string { + const metadataPattern = new RegExp( + `^\\s*//\\s*${DEFERRED_STEP_SOURCE_METADATA_PREFIX}[A-Za-z0-9+/=]+\\s*\\r?\\n?` + ); + return source.replace(metadataPattern, ''); +} + +// This loader applies the "use workflow"/"use step" transform. +// Deferred step-copy files are transformed in step mode; all other files use client mode. +export default function workflowLoader( + this: { + resourcePath: string; + async?: () => ( + error: Error | null, + content?: string, + sourceMap?: any + ) => void; + }, + source: string | Buffer, + sourceMap: any +): string | Promise | void { + const callback = this.async?.(); + const run = async (): Promise<{ code: string; map: any }> => { + const filename = this.resourcePath; + const normalizedSource = source.toString(); + const isDeferredStepCopyFile = isDeferredStepCopyFilePath(filename); + const deferredStepSourceMetadata = isDeferredStepCopyFile + ? parseDeferredStepSourceMetadata(normalizedSource) + : null; + const sourceWithoutDeferredMetadata = isDeferredStepCopyFile + ? stripDeferredStepSourceMetadataComment(normalizedSource) + : normalizedSource; + const deferredSourceMapResult = isDeferredStepCopyFile + ? parseInlineSourceMapComment(sourceWithoutDeferredMetadata) + : { + sourceWithoutMapComment: sourceWithoutDeferredMetadata, + sourceMap: null, + }; + const sourceForTransform = deferredSourceMapResult.sourceWithoutMapComment; + + // Skip generated workflow route files to avoid re-processing them + if ((await checkGeneratedFile(filename)) && !isDeferredStepCopyFile) { + return { code: normalizedSource, map: sourceMap }; + } + + // Detect workflow patterns in the source code + const patterns = await detectPatterns(normalizedSource); + // Always notify discovery tracking, even for `false/false`, so files that + // previously had workflow/step usage are removed from the tracked sets. + if (!isDeferredStepCopyFile) { + await notifySocketServer( + filename, + patterns.hasUseWorkflow, + patterns.hasUseStep, + patterns.hasSerde + ); + + // For @workflow SDK packages, only transform files with actual directives, + // not files that just match serde patterns (which are internal SDK implementation files) + const isSdkFile = await checkSdkFile(filename); + if (isSdkFile && !patterns.hasDirective) { + return { code: normalizedSource, map: sourceMap }; + } + + // Check if file needs transformation based on patterns and path + if (!(await checkShouldTransform(filename, patterns))) { + return { code: normalizedSource, map: sourceMap }; + } + } + + const isTypeScript = + filename.endsWith('.ts') || + filename.endsWith('.tsx') || + filename.endsWith('.mts') || + filename.endsWith('.cts'); + + // Calculate relative filename for SWC plugin + // The SWC plugin uses filename to generate workflowId, so it must be relative + const workingDir = process.cwd(); + const relativeFilename = + deferredStepSourceMetadata?.relativeFilename || + (await getRelativeFilenameForSwc(filename, workingDir)); + + // Get decorator options from tsconfig (cached per working directory) + const decoratorOptions = await getDecoratorOptions(workingDir); + + // Resolve module specifier for packages (node_modules or workspace packages) + const moduleSpecifier = await getModuleSpecifier( + deferredStepSourceMetadata?.absolutePath || filename, + workingDir + ); + const mode = isDeferredStepCopyFile ? 'step' : 'client'; + + // Transform with SWC + const result = await transform(sourceForTransform, { + filename: relativeFilename, + jsc: { + parser: { + ...(isTypeScript + ? { + syntax: 'typescript', + tsx: filename.endsWith('.tsx'), + decorators: decoratorOptions.decorators, + } + : { + syntax: 'ecmascript', + jsx: filename.endsWith('.jsx'), + decorators: decoratorOptions.decorators, + }), + }, + target: 'es2022', + experimental: { + plugins: [ + [ + require.resolve('@workflow/swc-plugin'), + { mode, moduleSpecifier }, + ], ], - ], - }, - transform: { - react: { - runtime: 'preserve', }, - legacyDecorator: decoratorOptions.legacyDecorator, - decoratorMetadata: decoratorOptions.decoratorMetadata, + transform: { + react: { + runtime: 'preserve', + }, + legacyDecorator: decoratorOptions.legacyDecorator, + decoratorMetadata: decoratorOptions.decoratorMetadata, + }, }, - }, - minify: false, - inputSourceMap: sourceMap, - sourceMaps: true, - inlineSourcesContent: true, - }); + minify: false, + inputSourceMap: isDeferredStepCopyFile + ? deferredSourceMapResult.sourceMap || sourceMap + : sourceMap, + sourceMaps: true, + inlineSourcesContent: true, + }); - return result.code; + let transformedMap = sourceMap; + if (typeof result.map === 'string') { + try { + transformedMap = JSON.parse(result.map); + } catch { + transformedMap = result.map; + } + } else if (result.map) { + transformedMap = result.map; + } + + return { code: result.code, map: transformedMap }; + }; + + if (!callback) { + return run().then((result) => result.code); + } + + void run() + .then((result) => callback(null, result.code, result.map)) + .catch((error: unknown) => { + callback(error instanceof Error ? error : new Error(String(error))); + }); } diff --git a/packages/next/src/step-copy-utils.ts b/packages/next/src/step-copy-utils.ts new file mode 100644 index 0000000000..525eee5689 --- /dev/null +++ b/packages/next/src/step-copy-utils.ts @@ -0,0 +1,137 @@ +export const DEFERRED_STEP_COPY_DIR_NAME = '__workflow_step_files__'; +export const DEFERRED_STEP_SOURCE_METADATA_PREFIX = 'WORKFLOW_STEP_SOURCE_B64:'; +const INLINE_SOURCE_MAP_PATTERN = + /(?:^|\r?\n)\s*\/\/[#@]\s*sourceMappingURL=data:application\/json(?:;charset=[^;,]+)?;base64,([A-Za-z0-9+/=]+)\s*$/; + +export interface DeferredStepSourceMetadata { + relativeFilename: string; + absolutePath: string; +} + +function escapeRegExp(input: string): string { + return input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} + +function normalizePath(filePath: string): string { + return filePath.replace(/\\/g, '/'); +} + +export function isDeferredStepCopyFilePath(filePath: string): boolean { + const normalizedPath = normalizePath(filePath); + return normalizedPath.includes( + `/.well-known/workflow/v1/step/${DEFERRED_STEP_COPY_DIR_NAME}/` + ); +} + +export function createDeferredStepSourceMetadataComment( + metadata: DeferredStepSourceMetadata +): string { + const encoded = Buffer.from(JSON.stringify(metadata), 'utf-8').toString( + 'base64' + ); + return `// ${DEFERRED_STEP_SOURCE_METADATA_PREFIX}${encoded}`; +} + +function getLineCount(source: string): number { + if (source.length === 0) { + return 1; + } + const lineBreakMatches = source.match(/\r\n|\r|\n/g); + return (lineBreakMatches?.length ?? 0) + 1; +} + +function createIdentityLineMappings(lineCount: number): string { + if (lineCount <= 1) { + return 'AAAA'; + } + return `AAAA${';AACA'.repeat(lineCount - 1)}`; +} + +export function createDeferredStepCopyInlineSourceMapComment({ + sourcePath, + sourceContent, + generatedContent, +}: { + sourcePath: string; + sourceContent: string; + generatedContent?: string; +}): string { + const normalizedSourcePath = normalizePath(sourcePath); + const sourceMap = { + version: 3, + file: normalizedSourcePath.split('/').pop() ?? normalizedSourcePath, + sources: [normalizedSourcePath], + sourcesContent: [sourceContent], + names: [] as string[], + mappings: createIdentityLineMappings( + getLineCount(generatedContent ?? sourceContent) + ), + }; + const encodedSourceMap = Buffer.from( + JSON.stringify(sourceMap), + 'utf-8' + ).toString('base64'); + return `//# sourceMappingURL=data:application/json;base64,${encodedSourceMap}`; +} + +export function parseInlineSourceMapComment(source: string): { + sourceWithoutMapComment: string; + sourceMap: string | null; +} { + const mapMatch = source.match(INLINE_SOURCE_MAP_PATTERN); + if (!mapMatch?.[1]) { + return { + sourceWithoutMapComment: source, + sourceMap: null, + }; + } + + const sourceWithoutMapComment = source.replace(INLINE_SOURCE_MAP_PATTERN, ''); + try { + const decodedMap = Buffer.from(mapMatch[1], 'base64').toString('utf-8'); + JSON.parse(decodedMap); + return { + sourceWithoutMapComment, + sourceMap: decodedMap, + }; + } catch { + return { + sourceWithoutMapComment, + sourceMap: null, + }; + } +} + +export function parseDeferredStepSourceMetadata( + source: string +): DeferredStepSourceMetadata | null { + const pattern = new RegExp( + `^\\s*//\\s*${escapeRegExp(DEFERRED_STEP_SOURCE_METADATA_PREFIX)}([A-Za-z0-9+/=]+)\\s*$`, + 'm' + ); + const match = source.match(pattern); + const encoded = match?.[1]; + if (!encoded) { + return null; + } + + try { + const decoded = Buffer.from(encoded, 'base64').toString('utf-8'); + const parsed = JSON.parse(decoded) as Partial; + if ( + typeof parsed.relativeFilename !== 'string' || + parsed.relativeFilename.length === 0 || + typeof parsed.absolutePath !== 'string' || + parsed.absolutePath.length === 0 + ) { + return null; + } + + return { + relativeFilename: parsed.relativeFilename, + absolutePath: normalizePath(parsed.absolutePath), + }; + } catch { + return null; + } +} diff --git a/packages/next/src/swc-cache.ts b/packages/next/src/swc-cache.ts index 6b0bbe0a39..ae50e6cfd2 100644 --- a/packages/next/src/swc-cache.ts +++ b/packages/next/src/swc-cache.ts @@ -26,7 +26,6 @@ export function maybeInvalidateCacheOnSwcChange(distDir: string): void { } if (shouldInvalidateCache) { - console.log('workflow transform upgraded, invalidating Next.js cache'); // Delete cache directories const cacheDirs = [cacheDir, devCacheDir]; for (const dir of cacheDirs) { diff --git a/packages/web/package.json b/packages/web/package.json index d0bcc8c008..dd49270448 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -27,7 +27,7 @@ "format": "biome format --write" }, "dependencies": { - "next": "16.0.10" + "next": "16.1.6" }, "devDependencies": { "@biomejs/biome": "catalog:", diff --git a/packages/web/src/components/display-utils/health-check-button.tsx b/packages/web/src/components/display-utils/health-check-button.tsx index e2b89ae4bb..4fb5d949cf 100644 --- a/packages/web/src/components/display-utils/health-check-button.tsx +++ b/packages/web/src/components/display-utils/health-check-button.tsx @@ -3,18 +3,17 @@ import { Activity, Loader2 } from 'lucide-react'; import { useCallback, useMemo, useState } from 'react'; import { toast } from 'sonner'; +import type { + HealthCheckEndpoint, + HealthCheckResult, +} from '@workflow/core/runtime/helpers'; import { Button } from '@/components/ui/button'; import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip'; -import { - type EnvMap, - type HealthCheckEndpoint, - type HealthCheckResult, - runHealthCheck, -} from '@/server/workflow-server-actions'; +import { type EnvMap, runHealthCheck } from '@/server/workflow-server-actions'; interface EndpointResult { endpoint: HealthCheckEndpoint; diff --git a/packages/web/src/server/workflow-server-actions.ts b/packages/web/src/server/workflow-server-actions.ts index a1021d03b2..db331ab20c 100644 --- a/packages/web/src/server/workflow-server-actions.ts +++ b/packages/web/src/server/workflow-server-actions.ts @@ -1075,8 +1075,6 @@ export async function fetchWorkflowsManifest( }); } -export type { HealthCheckEndpoint, HealthCheckResult }; - /** * Run a queue-based health check on a workflow endpoint. * diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f5cd3f4fc..f3379575e9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -128,13 +128,13 @@ importers: version: 19.1.9(@types/react@19.1.13) '@vercel/analytics': specifier: ^1.6.1 - version: 1.6.1(@sveltejs/kit@2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(svelte@5.43.3)(vue-router@4.6.3(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)) + version: 1.6.1(@sveltejs/kit@2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(svelte@5.43.3)(vue-router@4.6.3(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)) '@vercel/edge-config': specifier: ^1.4.0 version: 1.4.0(@opentelemetry/api@1.9.0) '@vercel/speed-insights': specifier: 1.3.1 - version: 1.3.1(@sveltejs/kit@2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(svelte@5.43.3)(vue-router@4.6.3(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)) + version: 1.3.1(@sveltejs/kit@2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(svelte@5.43.3)(vue-router@4.6.3(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)) '@workflow/ai': specifier: workspace:* version: link:../packages/ai @@ -197,16 +197,16 @@ importers: version: 5.1.0 fumadocs-core: specifier: 16.2.2 - version: 16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) + version: 16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) fumadocs-mdx: specifier: 14.0.4 - version: 14.0.4(fumadocs-core@16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 14.0.4(fumadocs-core@16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) fumadocs-typescript: specifier: ^4.0.13 - version: 4.0.13(@types/react@19.1.13)(fumadocs-core@16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(fumadocs-ui@16.2.2(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18))(typescript@5.9.3) + version: 4.0.13(@types/react@19.1.13)(fumadocs-core@16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(fumadocs-ui@16.2.2(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18))(typescript@5.9.3) fumadocs-ui: specifier: 16.2.2 - version: 16.2.2(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18) + version: 16.2.2(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18) github-slugger: specifier: ^2.0.0 version: 2.0.0 @@ -229,8 +229,8 @@ importers: specifier: 5.1.6 version: 5.1.6 next: - specifier: 16.0.10 - version: 16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: 16.1.6 + version: 16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -347,7 +347,7 @@ importers: dependencies: '@swc/core': specifier: 1.15.3 - version: 1.15.3 + version: 1.15.3(@swc/helpers@0.5.18) '@workflow/builders': specifier: workspace:* version: link:../builders @@ -381,7 +381,7 @@ importers: dependencies: '@swc/core': specifier: 'catalog:' - version: 1.15.3 + version: 1.15.3(@swc/helpers@0.5.18) '@workflow/core': specifier: workspace:* version: link:../core @@ -433,7 +433,7 @@ importers: version: 6.2.31(typescript@5.9.3) '@swc/core': specifier: 'catalog:' - version: 1.15.3 + version: 1.15.3(@swc/helpers@0.5.18) '@workflow/builders': specifier: workspace:* version: link:../builders @@ -671,10 +671,10 @@ importers: dependencies: '@swc/cli': specifier: '>=0.4.0' - version: 0.6.0(@swc/core@1.15.3)(chokidar@4.0.3) + version: 0.6.0(@swc/core@1.15.3(@swc/helpers@0.5.18))(chokidar@4.0.3) '@swc/core': specifier: 'catalog:' - version: 1.15.3 + version: 1.15.3(@swc/helpers@0.5.18) '@workflow/builders': specifier: workspace:* version: link:../builders @@ -705,7 +705,7 @@ importers: dependencies: '@swc/core': specifier: 'catalog:' - version: 1.15.3 + version: 1.15.3(@swc/helpers@0.5.18) '@workflow/builders': specifier: workspace:* version: link:../builders @@ -742,7 +742,7 @@ importers: dependencies: '@swc/core': specifier: 'catalog:' - version: 1.15.3 + version: 1.15.3(@swc/helpers@0.5.18) '@workflow/builders': specifier: workspace:* version: link:../builders @@ -807,7 +807,7 @@ importers: dependencies: '@swc/core': specifier: 'catalog:' - version: 1.15.3 + version: 1.15.3(@swc/helpers@0.5.18) '@workflow/builders': specifier: workspace:* version: link:../builders @@ -841,7 +841,7 @@ importers: dependencies: '@swc/core': specifier: 'catalog:' - version: 1.15.3 + version: 1.15.3(@swc/helpers@0.5.18) '@workflow/builders': specifier: workspace:* version: link:../builders @@ -881,7 +881,7 @@ importers: dependencies: '@swc/core': specifier: 'catalog:' - version: 1.15.3 + version: 1.15.3(@swc/helpers@0.5.18) packages/tsconfig: {} @@ -944,8 +944,8 @@ importers: packages/web: dependencies: next: - specifier: 16.0.10 - version: 16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 16.1.6 + version: 16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@biomejs/biome': specifier: 'catalog:' @@ -1030,7 +1030,7 @@ importers: version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) nuqs: specifier: ^2.2.5 - version: 2.8.3(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.10.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) + version: 2.8.3(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.10.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) react: specifier: 19.1.0 version: 19.1.0 @@ -1580,16 +1580,16 @@ importers: devDependencies: '@nestjs/cli': specifier: ^11.0.0 - version: 11.0.16(@swc/cli@0.6.0(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(@types/node@22.19.0)(esbuild@0.25.12) + version: 11.0.16(@swc/cli@0.6.0(@swc/core@1.15.3(@swc/helpers@0.5.18))(chokidar@4.0.3))(@swc/core@1.15.3(@swc/helpers@0.5.18))(@types/node@22.19.0)(esbuild@0.25.12) '@nestjs/schematics': specifier: ^11.0.0 version: 11.0.9(chokidar@4.0.3)(typescript@5.9.3) '@swc/cli': specifier: ^0.6.0 - version: 0.6.0(@swc/core@1.15.3)(chokidar@4.0.3) + version: 0.6.0(@swc/core@1.15.3(@swc/helpers@0.5.18))(chokidar@4.0.3) '@swc/core': specifier: ^1.10.0 - version: 1.15.3 + version: 1.15.3(@swc/helpers@0.5.18) '@types/node': specifier: ^22.10.7 version: 22.19.0 @@ -1918,7 +1918,7 @@ importers: version: 6.1.1(@sveltejs/kit@2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@24.6.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@24.6.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(rollup@4.53.2) '@swc/core': specifier: 'catalog:' - version: 1.15.3 + version: 1.15.3(@swc/helpers@0.5.18) '@vercel/otel': specifier: ^1.13.0 version: 1.13.0(@opentelemetry/api-logs@0.57.2)(@opentelemetry/api@1.9.0)(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-logs@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)) @@ -2060,7 +2060,7 @@ importers: version: 1.1.6(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@swc/core': specifier: 1.15.3 - version: 1.15.3 + version: 1.15.3(@swc/helpers@0.5.18) '@vercel/analytics': specifier: latest version: 1.6.1(@sveltejs/kit@2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(svelte@5.43.3)(vue-router@4.6.3(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)) @@ -2462,9 +2462,9 @@ packages: resolution: {integrity: sha512-1DHh0WTUmxlysz3EereHKtKoxVUG9UC5BsfAw6Bm4/6qDlJiqtY3oa2vebkYN23yltKdfsCK65cwnBRU59mWVg==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-locate-window@3.893.0': - resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==} - engines: {node: '>=18.0.0'} + '@aws-sdk/util-locate-window@3.965.4': + resolution: {integrity: sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog==} + engines: {node: '>=20.0.0'} '@aws-sdk/util-user-agent-browser@3.840.0': resolution: {integrity: sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==} @@ -3428,8 +3428,8 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -3442,16 +3442,20 @@ packages: resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.4.1': - resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==} + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.16.0': resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.3': + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/js@9.38.0': @@ -3462,8 +3466,8 @@ packages: resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.4.0': - resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fastify/ajv-compiler@4.0.5': @@ -4278,102 +4282,51 @@ packages: engines: {node: '>=18.14.0'} hasBin: true - '@next/env@16.0.10': - resolution: {integrity: sha512-8tuaQkyDVgeONQ1MeT9Mkk8pQmZapMKFh5B+OrFUlG3rVmYTXcXlBetBgTurKXGaIZvkoqRT9JL5K3phXcgang==} - '@next/env@16.1.6': resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==} - '@next/swc-darwin-arm64@16.0.10': - resolution: {integrity: sha512-4XgdKtdVsaflErz+B5XeG0T5PeXKDdruDf3CRpnhN+8UebNa5N2H58+3GDgpn/9GBurrQ1uWW768FfscwYkJRg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - '@next/swc-darwin-arm64@16.1.6': resolution: {integrity: sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.0.10': - resolution: {integrity: sha512-spbEObMvRKkQ3CkYVOME+ocPDFo5UqHb8EMTS78/0mQ+O1nqE8toHJVioZo4TvebATxgA8XMTHHrScPrn68OGw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - '@next/swc-darwin-x64@16.1.6': resolution: {integrity: sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.0.10': - resolution: {integrity: sha512-uQtWE3X0iGB8apTIskOMi2w/MKONrPOUCi5yLO+v3O8Mb5c7K4Q5KD1jvTpTF5gJKa3VH/ijKjKUq9O9UhwOYw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@next/swc-linux-arm64-gnu@16.1.6': resolution: {integrity: sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@16.0.10': - resolution: {integrity: sha512-llA+hiDTrYvyWI21Z0L1GiXwjQaanPVQQwru5peOgtooeJ8qx3tlqRV2P7uH2pKQaUfHxI/WVarvI5oYgGxaTw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@next/swc-linux-arm64-musl@16.1.6': resolution: {integrity: sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@16.0.10': - resolution: {integrity: sha512-AK2q5H0+a9nsXbeZ3FZdMtbtu9jxW4R/NgzZ6+lrTm3d6Zb7jYrWcgjcpM1k8uuqlSy4xIyPR2YiuUr+wXsavA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@next/swc-linux-x64-gnu@16.1.6': resolution: {integrity: sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@16.0.10': - resolution: {integrity: sha512-1TDG9PDKivNw5550S111gsO4RGennLVl9cipPhtkXIFVwo31YZ73nEbLjNC8qG3SgTz/QZyYyaFYMeY4BKZR/g==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@next/swc-linux-x64-musl@16.1.6': resolution: {integrity: sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@16.0.10': - resolution: {integrity: sha512-aEZIS4Hh32xdJQbHz121pyuVZniSNoqDVx1yIr2hy+ZwJGipeqnMZBJHyMxv2tiuAXGx6/xpTcQJ6btIiBjgmg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - '@next/swc-win32-arm64-msvc@16.1.6': resolution: {integrity: sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.0.10': - resolution: {integrity: sha512-E+njfCoFLb01RAFEnGZn6ERoOqhK1Gl3Lfz1Kjnj0Ulfu7oJbuMyvBKNj/bw8XZnenHDASlygTjZICQW+rYW1Q==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - '@next/swc-win32-x64-msvc@16.1.6': resolution: {integrity: sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==} engines: {node: '>= 10'} @@ -7303,32 +7256,32 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@smithy/abort-controller@4.2.3': - resolution: {integrity: sha512-xWL9Mf8b7tIFuAlpjKtRPnHrR8XVrwTj5NPYO/QwZPtc0SDLsPxb56V5tzi5yspSMytISHybifez+4jlrx0vkQ==} + '@smithy/abort-controller@4.2.8': + resolution: {integrity: sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==} engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.3.3': - resolution: {integrity: sha512-xSql8A1Bl41O9JvGU/CtgiLBlwkvpHTSKRlvz9zOBvBCPjXghZ6ZkcVzmV2f7FLAA+80+aqKmIOmy8pEDrtCaw==} + '@smithy/config-resolver@4.4.6': + resolution: {integrity: sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==} engines: {node: '>=18.0.0'} - '@smithy/core@3.17.0': - resolution: {integrity: sha512-Tir3DbfoTO97fEGUZjzGeoXgcQAUBRDTmuH9A8lxuP8ATrgezrAJ6cLuRvwdKN4ZbYNlHgKlBX69Hyu3THYhtg==} + '@smithy/core@3.23.0': + resolution: {integrity: sha512-Yq4UPVoQICM9zHnByLmG8632t2M0+yap4T7ANVw482J0W7HW0pOuxwVmeOwzJqX2Q89fkXz0Vybz55Wj2Xzrsg==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.2.3': - resolution: {integrity: sha512-hA1MQ/WAHly4SYltJKitEsIDVsNmXcQfYBRv2e+q04fnqtAX5qXaybxy/fhUeAMCnQIdAjaGDb04fMHQefWRhw==} + '@smithy/credential-provider-imds@4.2.8': + resolution: {integrity: sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.3.4': - resolution: {integrity: sha512-bwigPylvivpRLCm+YK9I5wRIYjFESSVwl8JQ1vVx/XhCw0PtCi558NwTnT2DaVCl5pYlImGuQTSwMsZ+pIavRw==} + '@smithy/fetch-http-handler@5.3.9': + resolution: {integrity: sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==} engines: {node: '>=18.0.0'} - '@smithy/hash-node@4.2.3': - resolution: {integrity: sha512-6+NOdZDbfuU6s1ISp3UOk5Rg953RJ2aBLNLLBEcamLjHAg1Po9Ha7QIB5ZWhdRUVuOUrT8BVFR+O2KIPmw027g==} + '@smithy/hash-node@4.2.8': + resolution: {integrity: sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==} engines: {node: '>=18.0.0'} - '@smithy/invalid-dependency@4.2.3': - resolution: {integrity: sha512-Cc9W5DwDuebXEDMpOpl4iERo8I0KFjTnomK2RMdhhR87GwrSmUmwMxS4P5JdRf+LsjOdIqumcerwRgYMr/tZ9Q==} + '@smithy/invalid-dependency@4.2.8': + resolution: {integrity: sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': @@ -7339,80 +7292,80 @@ packages: resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-content-length@4.2.3': - resolution: {integrity: sha512-/atXLsT88GwKtfp5Jr0Ks1CSa4+lB+IgRnkNrrYP0h1wL4swHNb0YONEvTceNKNdZGJsye+W2HH8W7olbcPUeA==} + '@smithy/middleware-content-length@4.2.8': + resolution: {integrity: sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.3.4': - resolution: {integrity: sha512-/RJhpYkMOaUZoJEkddamGPPIYeKICKXOu/ojhn85dKDM0n5iDIhjvYAQLP3K5FPhgB203O3GpWzoK2OehEoIUw==} + '@smithy/middleware-endpoint@4.4.14': + resolution: {integrity: sha512-FUFNE5KVeaY6U/GL0nzAAHkaCHzXLZcY1EhtQnsAqhD8Du13oPKtMB9/0WK4/LK6a/T5OZ24wPoSShff5iI6Ag==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.4': - resolution: {integrity: sha512-vSgABQAkuUHRO03AhR2rWxVQ1un284lkBn+NFawzdahmzksAoOeVMnXXsuPViL4GlhRHXqFaMlc8Mj04OfQk1w==} + '@smithy/middleware-retry@4.4.31': + resolution: {integrity: sha512-RXBzLpMkIrxBPe4C8OmEOHvS8aH9RUuCOH++Acb5jZDEblxDjyg6un72X9IcbrGTJoiUwmI7hLypNfuDACypbg==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.3': - resolution: {integrity: sha512-8g4NuUINpYccxiCXM5s1/V+uLtts8NcX4+sPEbvYQDZk4XoJfDpq5y2FQxfmUL89syoldpzNzA0R9nhzdtdKnQ==} + '@smithy/middleware-serde@4.2.9': + resolution: {integrity: sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@4.2.3': - resolution: {integrity: sha512-iGuOJkH71faPNgOj/gWuEGS6xvQashpLwWB1HjHq1lNNiVfbiJLpZVbhddPuDbx9l4Cgl0vPLq5ltRfSaHfspA==} + '@smithy/middleware-stack@4.2.8': + resolution: {integrity: sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==} engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.3.3': - resolution: {integrity: sha512-NzI1eBpBSViOav8NVy1fqOlSfkLgkUjUTlohUSgAEhHaFWA3XJiLditvavIP7OpvTjDp5u2LhtlBhkBlEisMwA==} + '@smithy/node-config-provider@4.3.8': + resolution: {integrity: sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.4.2': - resolution: {integrity: sha512-MHFvTjts24cjGo1byXqhXrbqm7uznFD/ESFx8npHMWTFQVdBZjrT1hKottmp69LBTRm/JQzP/sn1vPt0/r6AYQ==} + '@smithy/node-http-handler@4.4.10': + resolution: {integrity: sha512-u4YeUwOWRZaHbWaebvrs3UhwQwj+2VNmcVCwXcYTvPIuVyM7Ex1ftAj+fdbG/P4AkBwLq/+SKn+ydOI4ZJE9PA==} engines: {node: '>=18.0.0'} '@smithy/property-provider@3.1.11': resolution: {integrity: sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==} engines: {node: '>=16.0.0'} - '@smithy/property-provider@4.2.3': - resolution: {integrity: sha512-+1EZ+Y+njiefCohjlhyOcy1UNYjT+1PwGFHCxA/gYctjg3DQWAU19WigOXAco/Ql8hZokNehpzLd0/+3uCreqQ==} + '@smithy/property-provider@4.2.8': + resolution: {integrity: sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==} engines: {node: '>=18.0.0'} - '@smithy/protocol-http@5.3.3': - resolution: {integrity: sha512-Mn7f/1aN2/jecywDcRDvWWWJF4uwg/A0XjFMJtj72DsgHTByfjRltSqcT9NyE9RTdBSN6X1RSXrhn/YWQl8xlw==} + '@smithy/protocol-http@5.3.8': + resolution: {integrity: sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.2.3': - resolution: {integrity: sha512-LOVCGCmwMahYUM/P0YnU/AlDQFjcu+gWbFJooC417QRB/lDJlWSn8qmPSDp+s4YVAHOgtgbNG4sR+SxF/VOcJQ==} + '@smithy/querystring-builder@4.2.8': + resolution: {integrity: sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==} engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.2.3': - resolution: {integrity: sha512-cYlSNHcTAX/wc1rpblli3aUlLMGgKZ/Oqn8hhjFASXMCXjIqeuQBei0cnq2JR8t4RtU9FpG6uyl6PxyArTiwKA==} + '@smithy/querystring-parser@4.2.8': + resolution: {integrity: sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==} engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.2.3': - resolution: {integrity: sha512-NkxsAxFWwsPsQiwFG2MzJ/T7uIR6AQNh1SzcxSUnmmIqIQMlLRQDKhc17M7IYjiuBXhrQRjQTo3CxX+DobS93g==} + '@smithy/service-error-classification@4.2.8': + resolution: {integrity: sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.3.3': - resolution: {integrity: sha512-9f9Ixej0hFhroOK2TxZfUUDR13WVa8tQzhSzPDgXe5jGL3KmaM9s8XN7RQwqtEypI82q9KHnKS71CJ+q/1xLtQ==} + '@smithy/shared-ini-file-loader@4.4.3': + resolution: {integrity: sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.3.3': - resolution: {integrity: sha512-CmSlUy+eEYbIEYN5N3vvQTRfqt0lJlQkaQUIf+oizu7BbDut0pozfDjBGecfcfWf7c62Yis4JIEgqQ/TCfodaA==} + '@smithy/signature-v4@5.3.8': + resolution: {integrity: sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.9.0': - resolution: {integrity: sha512-qz7RTd15GGdwJ3ZCeBKLDQuUQ88m+skh2hJwcpPm1VqLeKzgZvXf6SrNbxvx7uOqvvkjCMXqx3YB5PDJyk00ww==} + '@smithy/smithy-client@4.11.3': + resolution: {integrity: sha512-Q7kY5sDau8OoE6Y9zJoRGgje8P4/UY0WzH8R2ok0PDh+iJ+ZnEKowhjEqYafVcubkbYxQVaqwm3iufktzhprGg==} engines: {node: '>=18.0.0'} '@smithy/types@3.7.2': resolution: {integrity: sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==} engines: {node: '>=16.0.0'} - '@smithy/types@4.8.0': - resolution: {integrity: sha512-QpELEHLO8SsQVtqP+MkEgCYTFW0pleGozfs3cZ183ZBj9z3VC1CX1/wtFMK64p+5bhtZo41SeLK1rBRtd25nHQ==} + '@smithy/types@4.12.0': + resolution: {integrity: sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.2.3': - resolution: {integrity: sha512-I066AigYvY3d9VlU3zG9XzZg1yT10aNqvCaBTw9EPgu5GrsEl1aUkcMvhkIXascYH1A8W0LQo3B1Kr1cJNcQEw==} + '@smithy/url-parser@4.2.8': + resolution: {integrity: sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==} engines: {node: '>=18.0.0'} '@smithy/util-base64@4.3.0': @@ -7439,32 +7392,32 @@ packages: resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.3.3': - resolution: {integrity: sha512-vqHoybAuZXbFXZqgzquiUXtdY+UT/aU33sxa4GBPkiYklmR20LlCn+d3Wc3yA5ZM13gQ92SZe/D8xh6hkjx+IQ==} + '@smithy/util-defaults-mode-browser@4.3.30': + resolution: {integrity: sha512-cMni0uVU27zxOiU8TuC8pQLC1pYeZ/xEMxvchSK/ILwleRd1ugobOcIRr5vXtcRqKd4aBLWlpeBoDPJJ91LQng==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.2.4': - resolution: {integrity: sha512-X5/xrPHedifo7hJUUWKlpxVb2oDOiqPUXlvsZv1EZSjILoutLiJyWva3coBpn00e/gPSpH8Rn2eIbgdwHQdW7Q==} + '@smithy/util-defaults-mode-node@4.2.33': + resolution: {integrity: sha512-LEb2aq5F4oZUSzWBG7S53d4UytZSkOEJPXcBq/xbG2/TmK9EW5naUZ8lKu1BEyWMzdHIzEVN16M3k8oxDq+DJA==} engines: {node: '>=18.0.0'} - '@smithy/util-endpoints@3.2.3': - resolution: {integrity: sha512-aCfxUOVv0CzBIkU10TubdgKSx5uRvzH064kaiPEWfNIvKOtNpu642P4FP1hgOFkjQIkDObrfIDnKMKkeyrejvQ==} + '@smithy/util-endpoints@3.2.8': + resolution: {integrity: sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==} engines: {node: '>=18.0.0'} '@smithy/util-hex-encoding@4.2.0': resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} engines: {node: '>=18.0.0'} - '@smithy/util-middleware@4.2.3': - resolution: {integrity: sha512-v5ObKlSe8PWUHCqEiX2fy1gNv6goiw6E5I/PN2aXg3Fb/hse0xeaAnSpXDiWl7x6LamVKq7senB+m5LOYHUAHw==} + '@smithy/util-middleware@4.2.8': + resolution: {integrity: sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==} engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.2.3': - resolution: {integrity: sha512-lLPWnakjC0q9z+OtiXk+9RPQiYPNAovt2IXD3CP4LkOnd9NpUsxOjMx1SnoUVB7Orb7fZp67cQMtTBKMFDvOGg==} + '@smithy/util-retry@4.2.8': + resolution: {integrity: sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.5.3': - resolution: {integrity: sha512-oZvn8a5bwwQBNYHT2eNo0EU8Kkby3jeIg1P2Lu9EQtqDxki1LIjGRJM6dJ5CZUig8QmLxWxqOKWvg3mVoOBs5A==} + '@smithy/util-stream@4.5.12': + resolution: {integrity: sha512-D8tgkrmhAX/UNeCZbqbEO3uqyghUnEmmoO9YEvRuwxjlkKKUE7FOgCJnqpTlQPe9MApdWPky58mNQQHbnCzoNg==} engines: {node: '>=18.0.0'} '@smithy/util-uri-escape@4.2.0': @@ -7628,6 +7581,9 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/helpers@0.5.18': + resolution: {integrity: sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==} + '@swc/types@0.1.25': resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} @@ -8804,8 +8760,8 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - bowser@2.12.1: - resolution: {integrity: sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==} + bowser@2.14.1: + resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} boxen@8.0.1: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} @@ -8921,12 +8877,12 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001751: - resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} - caniuse-lite@1.0.30001766: resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} + caniuse-lite@1.0.30001769: + resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==} + castable-video@1.1.11: resolution: {integrity: sha512-LCRTK6oe7SB1SiUQFzZCo6D6gcEzijqBTVIuj3smKpQdesXM18QTbCVqWgh9MfOeQgTx/i9ji5jGcdqNPeWg2g==} @@ -9263,6 +9219,10 @@ packages: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + copy-anything@4.0.5: resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} engines: {node: '>=18'} @@ -10159,8 +10119,8 @@ packages: engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrap@2.1.2: @@ -10685,6 +10645,9 @@ packages: get-tsconfig@4.12.0: resolution: {integrity: sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==} + get-tsconfig@4.13.6: + resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} + giget@2.0.0: resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} hasBin: true @@ -12245,27 +12208,6 @@ packages: next-validate-link@1.6.3: resolution: {integrity: sha512-batZxYlkQQSa8jl0gi1AQd5BlJDY3FG41yecpvBWVIM1t/FnBmbo3cMZZx8sSt4UdrsbLuRE2P3p5s+TsQ8m1A==} - next@16.0.10: - resolution: {integrity: sha512-RtWh5PUgI+vxlV3HdR+IfWA1UUHu0+Ram/JBO4vWB54cVPentCD0e+lxyAYEsDTqGGMg7qpjhKh6dc6aW7W/sA==} - engines: {node: '>=20.9.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.51.1 - babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - babel-plugin-react-compiler: - optional: true - sass: - optional: true - next@16.1.6: resolution: {integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==} engines: {node: '>=20.9.0'} @@ -12332,8 +12274,8 @@ packages: nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} - node-abi@3.78.0: - resolution: {integrity: sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==} + node-abi@3.87.0: + resolution: {integrity: sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==} engines: {node: '>=10'} node-abort-controller@3.1.1: @@ -13647,6 +13589,11 @@ packages: engines: {node: '>= 0.4'} hasBin: true + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true @@ -14157,8 +14104,8 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - strnum@2.1.1: - resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} + strnum@2.1.2: + resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==} strtok3@10.3.4: resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} @@ -15857,7 +15804,7 @@ snapshots: '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-locate-window': 3.893.0 + '@aws-sdk/util-locate-window': 3.965.4 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -15891,30 +15838,30 @@ snapshots: '@aws-sdk/util-endpoints': 3.844.0 '@aws-sdk/util-user-agent-browser': 3.840.0 '@aws-sdk/util-user-agent-node': 3.844.0 - '@smithy/config-resolver': 4.3.3 - '@smithy/core': 3.17.0 - '@smithy/fetch-http-handler': 5.3.4 - '@smithy/hash-node': 4.2.3 - '@smithy/invalid-dependency': 4.2.3 - '@smithy/middleware-content-length': 4.2.3 - '@smithy/middleware-endpoint': 4.3.4 - '@smithy/middleware-retry': 4.4.4 - '@smithy/middleware-serde': 4.2.3 - '@smithy/middleware-stack': 4.2.3 - '@smithy/node-config-provider': 4.3.3 - '@smithy/node-http-handler': 4.4.2 - '@smithy/protocol-http': 5.3.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 - '@smithy/url-parser': 4.2.3 + '@smithy/config-resolver': 4.4.6 + '@smithy/core': 3.23.0 + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/hash-node': 4.2.8 + '@smithy/invalid-dependency': 4.2.8 + '@smithy/middleware-content-length': 4.2.8 + '@smithy/middleware-endpoint': 4.4.14 + '@smithy/middleware-retry': 4.4.31 + '@smithy/middleware-serde': 4.2.9 + '@smithy/middleware-stack': 4.2.8 + '@smithy/node-config-provider': 4.3.8 + '@smithy/node-http-handler': 4.4.10 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.11.3 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.3 - '@smithy/util-defaults-mode-node': 4.2.4 - '@smithy/util-endpoints': 3.2.3 - '@smithy/util-middleware': 4.2.3 - '@smithy/util-retry': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.30 + '@smithy/util-defaults-mode-node': 4.2.33 + '@smithy/util-endpoints': 3.2.8 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -15935,30 +15882,30 @@ snapshots: '@aws-sdk/util-endpoints': 3.844.0 '@aws-sdk/util-user-agent-browser': 3.840.0 '@aws-sdk/util-user-agent-node': 3.844.0 - '@smithy/config-resolver': 4.3.3 - '@smithy/core': 3.17.0 - '@smithy/fetch-http-handler': 5.3.4 - '@smithy/hash-node': 4.2.3 - '@smithy/invalid-dependency': 4.2.3 - '@smithy/middleware-content-length': 4.2.3 - '@smithy/middleware-endpoint': 4.3.4 - '@smithy/middleware-retry': 4.4.4 - '@smithy/middleware-serde': 4.2.3 - '@smithy/middleware-stack': 4.2.3 - '@smithy/node-config-provider': 4.3.3 - '@smithy/node-http-handler': 4.4.2 - '@smithy/protocol-http': 5.3.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 - '@smithy/url-parser': 4.2.3 + '@smithy/config-resolver': 4.4.6 + '@smithy/core': 3.23.0 + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/hash-node': 4.2.8 + '@smithy/invalid-dependency': 4.2.8 + '@smithy/middleware-content-length': 4.2.8 + '@smithy/middleware-endpoint': 4.4.14 + '@smithy/middleware-retry': 4.4.31 + '@smithy/middleware-serde': 4.2.9 + '@smithy/middleware-stack': 4.2.8 + '@smithy/node-config-provider': 4.3.8 + '@smithy/node-http-handler': 4.4.10 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.11.3 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.3 - '@smithy/util-defaults-mode-node': 4.2.4 - '@smithy/util-endpoints': 3.2.3 - '@smithy/util-middleware': 4.2.3 - '@smithy/util-retry': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.30 + '@smithy/util-defaults-mode-node': 4.2.33 + '@smithy/util-endpoints': 3.2.8 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -15968,16 +15915,16 @@ snapshots: dependencies: '@aws-sdk/types': 3.840.0 '@aws-sdk/xml-builder': 3.821.0 - '@smithy/core': 3.17.0 - '@smithy/node-config-provider': 4.3.3 - '@smithy/property-provider': 4.2.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/signature-v4': 5.3.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 + '@smithy/core': 3.23.0 + '@smithy/node-config-provider': 4.3.8 + '@smithy/property-provider': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/signature-v4': 5.3.8 + '@smithy/smithy-client': 4.11.3 + '@smithy/types': 4.12.0 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.3 + '@smithy/util-middleware': 4.2.8 '@smithy/util-utf8': 4.2.0 fast-xml-parser: 5.2.5 tslib: 2.8.1 @@ -15986,21 +15933,21 @@ snapshots: dependencies: '@aws-sdk/core': 3.844.0 '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.2.3 - '@smithy/types': 4.8.0 + '@smithy/property-provider': 4.2.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/credential-provider-http@3.844.0': dependencies: '@aws-sdk/core': 3.844.0 '@aws-sdk/types': 3.840.0 - '@smithy/fetch-http-handler': 5.3.4 - '@smithy/node-http-handler': 4.4.2 - '@smithy/property-provider': 4.2.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 - '@smithy/util-stream': 4.5.3 + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/node-http-handler': 4.4.10 + '@smithy/property-provider': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.11.3 + '@smithy/types': 4.12.0 + '@smithy/util-stream': 4.5.12 tslib: 2.8.1 '@aws-sdk/credential-provider-ini@3.844.0': @@ -16013,10 +15960,10 @@ snapshots: '@aws-sdk/credential-provider-web-identity': 3.844.0 '@aws-sdk/nested-clients': 3.844.0 '@aws-sdk/types': 3.840.0 - '@smithy/credential-provider-imds': 4.2.3 - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/credential-provider-imds': 4.2.8 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -16030,10 +15977,10 @@ snapshots: '@aws-sdk/credential-provider-sso': 3.844.0 '@aws-sdk/credential-provider-web-identity': 3.844.0 '@aws-sdk/types': 3.840.0 - '@smithy/credential-provider-imds': 4.2.3 - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/credential-provider-imds': 4.2.8 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -16042,9 +15989,9 @@ snapshots: dependencies: '@aws-sdk/core': 3.844.0 '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/credential-provider-sso@3.844.0': @@ -16053,9 +16000,9 @@ snapshots: '@aws-sdk/core': 3.844.0 '@aws-sdk/token-providers': 3.844.0 '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -16073,8 +16020,8 @@ snapshots: '@aws-sdk/core': 3.844.0 '@aws-sdk/nested-clients': 3.844.0 '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.2.3 - '@smithy/types': 4.8.0 + '@smithy/property-provider': 4.2.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -16082,21 +16029,21 @@ snapshots: '@aws-sdk/middleware-host-header@3.840.0': dependencies: '@aws-sdk/types': 3.840.0 - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/middleware-logger@3.840.0': dependencies: '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/middleware-recursion-detection@3.840.0': dependencies: '@aws-sdk/types': 3.840.0 - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/middleware-user-agent@3.844.0': @@ -16104,9 +16051,9 @@ snapshots: '@aws-sdk/core': 3.844.0 '@aws-sdk/types': 3.840.0 '@aws-sdk/util-endpoints': 3.844.0 - '@smithy/core': 3.17.0 - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@smithy/core': 3.23.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/nested-clients@3.844.0': @@ -16123,30 +16070,30 @@ snapshots: '@aws-sdk/util-endpoints': 3.844.0 '@aws-sdk/util-user-agent-browser': 3.840.0 '@aws-sdk/util-user-agent-node': 3.844.0 - '@smithy/config-resolver': 4.3.3 - '@smithy/core': 3.17.0 - '@smithy/fetch-http-handler': 5.3.4 - '@smithy/hash-node': 4.2.3 - '@smithy/invalid-dependency': 4.2.3 - '@smithy/middleware-content-length': 4.2.3 - '@smithy/middleware-endpoint': 4.3.4 - '@smithy/middleware-retry': 4.4.4 - '@smithy/middleware-serde': 4.2.3 - '@smithy/middleware-stack': 4.2.3 - '@smithy/node-config-provider': 4.3.3 - '@smithy/node-http-handler': 4.4.2 - '@smithy/protocol-http': 5.3.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 - '@smithy/url-parser': 4.2.3 + '@smithy/config-resolver': 4.4.6 + '@smithy/core': 3.23.0 + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/hash-node': 4.2.8 + '@smithy/invalid-dependency': 4.2.8 + '@smithy/middleware-content-length': 4.2.8 + '@smithy/middleware-endpoint': 4.4.14 + '@smithy/middleware-retry': 4.4.31 + '@smithy/middleware-serde': 4.2.9 + '@smithy/middleware-stack': 4.2.8 + '@smithy/node-config-provider': 4.3.8 + '@smithy/node-http-handler': 4.4.10 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.11.3 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.3 - '@smithy/util-defaults-mode-node': 4.2.4 - '@smithy/util-endpoints': 3.2.3 - '@smithy/util-middleware': 4.2.3 - '@smithy/util-retry': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.30 + '@smithy/util-defaults-mode-node': 4.2.33 + '@smithy/util-endpoints': 3.2.8 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -16155,10 +16102,10 @@ snapshots: '@aws-sdk/region-config-resolver@3.840.0': dependencies: '@aws-sdk/types': 3.840.0 - '@smithy/node-config-provider': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/node-config-provider': 4.3.8 + '@smithy/types': 4.12.0 '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.3 + '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 '@aws-sdk/token-providers@3.844.0': @@ -16166,9 +16113,9 @@ snapshots: '@aws-sdk/core': 3.844.0 '@aws-sdk/nested-clients': 3.844.0 '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -16180,39 +16127,39 @@ snapshots: '@aws-sdk/types@3.840.0': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/util-endpoints@3.844.0': dependencies: '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.8.0 - '@smithy/url-parser': 4.2.3 - '@smithy/util-endpoints': 3.2.3 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-endpoints': 3.2.8 tslib: 2.8.1 - '@aws-sdk/util-locate-window@3.893.0': + '@aws-sdk/util-locate-window@3.965.4': dependencies: tslib: 2.8.1 '@aws-sdk/util-user-agent-browser@3.840.0': dependencies: '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.8.0 - bowser: 2.12.1 + '@smithy/types': 4.12.0 + bowser: 2.14.1 tslib: 2.8.1 '@aws-sdk/util-user-agent-node@3.844.0': dependencies: '@aws-sdk/middleware-user-agent': 3.844.0 '@aws-sdk/types': 3.840.0 - '@smithy/node-config-provider': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/node-config-provider': 4.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/xml-builder@3.821.0': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@babel/code-frame@7.27.1': @@ -16984,7 +16931,7 @@ snapshots: '@esbuild/win32-x64@0.27.2': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.38.0(jiti@2.6.1))': dependencies: eslint: 9.38.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 @@ -17002,9 +16949,9 @@ snapshots: - supports-color optional: true - '@eslint/config-helpers@0.4.1': + '@eslint/config-helpers@0.4.2': dependencies: - '@eslint/core': 0.16.0 + '@eslint/core': 0.17.0 optional: true '@eslint/core@0.16.0': @@ -17012,7 +16959,12 @@ snapshots: '@types/json-schema': 7.0.15 optional: true - '@eslint/eslintrc@3.3.1': + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + optional: true + + '@eslint/eslintrc@3.3.3': dependencies: ajv: 6.12.6 debug: 4.4.3(supports-color@8.1.1) @@ -17033,9 +16985,9 @@ snapshots: '@eslint/object-schema@2.1.7': optional: true - '@eslint/plugin-kit@0.4.0': + '@eslint/plugin-kit@0.4.1': dependencies: - '@eslint/core': 0.16.0 + '@eslint/core': 0.17.0 levn: 0.4.1 optional: true @@ -17744,7 +17696,7 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@nestjs/cli@11.0.16(@swc/cli@0.6.0(@swc/core@1.15.3)(chokidar@4.0.3))(@swc/core@1.15.3)(@types/node@22.19.0)(esbuild@0.25.12)': + '@nestjs/cli@11.0.16(@swc/cli@0.6.0(@swc/core@1.15.3(@swc/helpers@0.5.18))(chokidar@4.0.3))(@swc/core@1.15.3(@swc/helpers@0.5.18))(@types/node@22.19.0)(esbuild@0.25.12)': dependencies: '@angular-devkit/core': 19.2.19(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3) @@ -17755,18 +17707,18 @@ snapshots: chokidar: 4.0.3 cli-table3: 0.6.5 commander: 4.1.1 - fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.3)(esbuild@0.25.12)) + fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.3(@swc/helpers@0.5.18))(esbuild@0.25.12)) glob: 13.0.0 node-emoji: 1.11.0 ora: 5.4.1 tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.2.0 typescript: 5.9.3 - webpack: 5.104.1(@swc/core@1.15.3)(esbuild@0.25.12) + webpack: 5.104.1(@swc/core@1.15.3(@swc/helpers@0.5.18))(esbuild@0.25.12) webpack-node-externals: 3.0.0 optionalDependencies: - '@swc/cli': 0.6.0(@swc/core@1.15.3)(chokidar@4.0.3) - '@swc/core': 1.15.3 + '@swc/cli': 0.6.0(@swc/core@1.15.3(@swc/helpers@0.5.18))(chokidar@4.0.3) + '@swc/core': 1.15.3(@swc/helpers@0.5.18) transitivePeerDependencies: - '@types/node' - esbuild @@ -17914,55 +17866,29 @@ snapshots: - rollup - supports-color - '@next/env@16.0.10': {} - '@next/env@16.1.6': {} - '@next/swc-darwin-arm64@16.0.10': - optional: true - '@next/swc-darwin-arm64@16.1.6': optional: true - '@next/swc-darwin-x64@16.0.10': - optional: true - '@next/swc-darwin-x64@16.1.6': optional: true - '@next/swc-linux-arm64-gnu@16.0.10': - optional: true - '@next/swc-linux-arm64-gnu@16.1.6': optional: true - '@next/swc-linux-arm64-musl@16.0.10': - optional: true - '@next/swc-linux-arm64-musl@16.1.6': optional: true - '@next/swc-linux-x64-gnu@16.0.10': - optional: true - '@next/swc-linux-x64-gnu@16.1.6': optional: true - '@next/swc-linux-x64-musl@16.0.10': - optional: true - '@next/swc-linux-x64-musl@16.1.6': optional: true - '@next/swc-win32-arm64-msvc@16.0.10': - optional: true - '@next/swc-win32-arm64-msvc@16.1.6': optional: true - '@next/swc-win32-x64-msvc@16.0.10': - optional: true - '@next/swc-win32-x64-msvc@16.1.6': optional: true @@ -21572,58 +21498,59 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@smithy/abort-controller@4.2.3': + '@smithy/abort-controller@4.2.8': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/config-resolver@4.3.3': + '@smithy/config-resolver@4.4.6': dependencies: - '@smithy/node-config-provider': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/node-config-provider': 4.3.8 + '@smithy/types': 4.12.0 '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.3 + '@smithy/util-endpoints': 3.2.8 + '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/core@3.17.0': + '@smithy/core@3.23.0': dependencies: - '@smithy/middleware-serde': 4.2.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@smithy/middleware-serde': 4.2.9 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.3 - '@smithy/util-stream': 4.5.3 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-stream': 4.5.12 '@smithy/util-utf8': 4.2.0 '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.2.3': + '@smithy/credential-provider-imds@4.2.8': dependencies: - '@smithy/node-config-provider': 4.3.3 - '@smithy/property-provider': 4.2.3 - '@smithy/types': 4.8.0 - '@smithy/url-parser': 4.2.3 + '@smithy/node-config-provider': 4.3.8 + '@smithy/property-provider': 4.2.8 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.3.4': + '@smithy/fetch-http-handler@5.3.9': dependencies: - '@smithy/protocol-http': 5.3.3 - '@smithy/querystring-builder': 4.2.3 - '@smithy/types': 4.8.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/querystring-builder': 4.2.8 + '@smithy/types': 4.12.0 '@smithy/util-base64': 4.3.0 tslib: 2.8.1 - '@smithy/hash-node@4.2.3': + '@smithy/hash-node@4.2.8': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 '@smithy/util-buffer-from': 4.2.0 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/invalid-dependency@4.2.3': + '@smithy/invalid-dependency@4.2.8': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': @@ -21634,59 +21561,59 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/middleware-content-length@4.2.3': + '@smithy/middleware-content-length@4.2.8': dependencies: - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.3.4': + '@smithy/middleware-endpoint@4.4.14': dependencies: - '@smithy/core': 3.17.0 - '@smithy/middleware-serde': 4.2.3 - '@smithy/node-config-provider': 4.3.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 - '@smithy/url-parser': 4.2.3 - '@smithy/util-middleware': 4.2.3 + '@smithy/core': 3.23.0 + '@smithy/middleware-serde': 4.2.9 + '@smithy/node-config-provider': 4.3.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.4': + '@smithy/middleware-retry@4.4.31': dependencies: - '@smithy/node-config-provider': 4.3.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/service-error-classification': 4.2.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 - '@smithy/util-middleware': 4.2.3 - '@smithy/util-retry': 4.2.3 + '@smithy/node-config-provider': 4.3.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/service-error-classification': 4.2.8 + '@smithy/smithy-client': 4.11.3 + '@smithy/types': 4.12.0 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/middleware-serde@4.2.3': + '@smithy/middleware-serde@4.2.9': dependencies: - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/middleware-stack@4.2.3': + '@smithy/middleware-stack@4.2.8': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/node-config-provider@4.3.3': + '@smithy/node-config-provider@4.3.8': dependencies: - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/node-http-handler@4.4.2': + '@smithy/node-http-handler@4.4.10': dependencies: - '@smithy/abort-controller': 4.2.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/querystring-builder': 4.2.3 - '@smithy/types': 4.8.0 + '@smithy/abort-controller': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/querystring-builder': 4.2.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/property-provider@3.1.11': @@ -21694,69 +21621,69 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/property-provider@4.2.3': + '@smithy/property-provider@4.2.8': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/protocol-http@5.3.3': + '@smithy/protocol-http@5.3.8': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/querystring-builder@4.2.3': + '@smithy/querystring-builder@4.2.8': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 '@smithy/util-uri-escape': 4.2.0 tslib: 2.8.1 - '@smithy/querystring-parser@4.2.3': + '@smithy/querystring-parser@4.2.8': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/service-error-classification@4.2.3': + '@smithy/service-error-classification@4.2.8': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 - '@smithy/shared-ini-file-loader@4.3.3': + '@smithy/shared-ini-file-loader@4.4.3': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/signature-v4@5.3.3': + '@smithy/signature-v4@5.3.8': dependencies: '@smithy/is-array-buffer': 4.2.0 - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-middleware': 4.2.3 + '@smithy/util-middleware': 4.2.8 '@smithy/util-uri-escape': 4.2.0 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.9.0': + '@smithy/smithy-client@4.11.3': dependencies: - '@smithy/core': 3.17.0 - '@smithy/middleware-endpoint': 4.3.4 - '@smithy/middleware-stack': 4.2.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 - '@smithy/util-stream': 4.5.3 + '@smithy/core': 3.23.0 + '@smithy/middleware-endpoint': 4.4.14 + '@smithy/middleware-stack': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + '@smithy/util-stream': 4.5.12 tslib: 2.8.1 '@smithy/types@3.7.2': dependencies: tslib: 2.8.1 - '@smithy/types@4.8.0': + '@smithy/types@4.12.0': dependencies: tslib: 2.8.1 - '@smithy/url-parser@4.2.3': + '@smithy/url-parser@4.2.8': dependencies: - '@smithy/querystring-parser': 4.2.3 - '@smithy/types': 4.8.0 + '@smithy/querystring-parser': 4.2.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/util-base64@4.3.0': @@ -21787,49 +21714,49 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.3': + '@smithy/util-defaults-mode-browser@4.3.30': dependencies: - '@smithy/property-provider': 4.2.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 + '@smithy/property-provider': 4.2.8 + '@smithy/smithy-client': 4.11.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.4': + '@smithy/util-defaults-mode-node@4.2.33': dependencies: - '@smithy/config-resolver': 4.3.3 - '@smithy/credential-provider-imds': 4.2.3 - '@smithy/node-config-provider': 4.3.3 - '@smithy/property-provider': 4.2.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 + '@smithy/config-resolver': 4.4.6 + '@smithy/credential-provider-imds': 4.2.8 + '@smithy/node-config-provider': 4.3.8 + '@smithy/property-provider': 4.2.8 + '@smithy/smithy-client': 4.11.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/util-endpoints@3.2.3': + '@smithy/util-endpoints@3.2.8': dependencies: - '@smithy/node-config-provider': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/node-config-provider': 4.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/util-hex-encoding@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@4.2.3': + '@smithy/util-middleware@4.2.8': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/util-retry@4.2.3': + '@smithy/util-retry@4.2.8': dependencies: - '@smithy/service-error-classification': 4.2.3 - '@smithy/types': 4.8.0 + '@smithy/service-error-classification': 4.2.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/util-stream@4.5.3': + '@smithy/util-stream@4.5.12': dependencies: - '@smithy/fetch-http-handler': 5.3.4 - '@smithy/node-http-handler': 4.4.2 - '@smithy/types': 4.8.0 + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/node-http-handler': 4.4.10 + '@smithy/types': 4.12.0 '@smithy/util-base64': 4.3.0 '@smithy/util-buffer-from': 4.2.0 '@smithy/util-hex-encoding': 4.2.0 @@ -22021,9 +21948,9 @@ snapshots: '@svta/common-media-library@0.12.4': {} - '@swc/cli@0.6.0(@swc/core@1.15.3)(chokidar@4.0.3)': + '@swc/cli@0.6.0(@swc/core@1.15.3(@swc/helpers@0.5.18))(chokidar@4.0.3)': dependencies: - '@swc/core': 1.15.3 + '@swc/core': 1.15.3(@swc/helpers@0.5.18) '@swc/counter': 0.1.3 '@xhmikosr/bin-wrapper': 13.2.0 commander: 8.3.0 @@ -22070,7 +21997,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.15.3': optional: true - '@swc/core@1.15.3': + '@swc/core@1.15.3(@swc/helpers@0.5.18)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.25 @@ -22085,6 +22012,7 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.15.3 '@swc/core-win32-ia32-msvc': 1.15.3 '@swc/core-win32-x64-msvc': 1.15.3 + '@swc/helpers': 0.5.18 '@swc/counter@0.1.3': {} @@ -22092,6 +22020,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@swc/helpers@0.5.18': + dependencies: + tslib: 2.8.1 + '@swc/types@0.1.25': dependencies: '@swc/counter': 0.1.3 @@ -22593,10 +22525,10 @@ snapshots: vue: 3.5.22(typescript@5.9.3) vue-router: 4.6.3(vue@3.5.22(typescript@5.9.3)) - '@vercel/analytics@1.6.1(@sveltejs/kit@2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(svelte@5.43.3)(vue-router@4.6.3(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))': + '@vercel/analytics@1.6.1(@sveltejs/kit@2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(svelte@5.43.3)(vue-router@4.6.3(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))': optionalDependencies: '@sveltejs/kit': 2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - next: 16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 svelte: 5.43.3 vue: 3.5.22(typescript@5.9.3) @@ -22733,10 +22665,10 @@ snapshots: optionalDependencies: ajv: 6.12.6 - '@vercel/speed-insights@1.3.1(@sveltejs/kit@2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(svelte@5.43.3)(vue-router@4.6.3(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))': + '@vercel/speed-insights@1.3.1(@sveltejs/kit@2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(svelte@5.43.3)(vue-router@4.6.3(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3))': optionalDependencies: '@sveltejs/kit': 2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - next: 16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 svelte: 5.43.3 vue: 3.5.22(typescript@5.9.3) @@ -23782,7 +23714,7 @@ snapshots: boolbase@1.0.0: {} - bowser@2.12.1: {} + bowser@2.14.1: {} boxen@8.0.1: dependencies: @@ -23919,14 +23851,14 @@ snapshots: caniuse-api@3.0.0: dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001766 + caniuse-lite: 1.0.30001769 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001751: {} - caniuse-lite@1.0.30001766: {} + caniuse-lite@1.0.30001769: {} + castable-video@1.1.11: dependencies: custom-media-element: 1.4.5 @@ -24228,6 +24160,9 @@ snapshots: cookie@1.0.2: {} + cookie@1.1.1: + optional: true + copy-anything@4.0.5: dependencies: is-what: 5.5.0 @@ -25128,14 +25063,14 @@ snapshots: eslint@9.38.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.38.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.1 + '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.16.0 - '@eslint/eslintrc': 3.3.1 + '@eslint/eslintrc': 3.3.3 '@eslint/js': 9.38.0 - '@eslint/plugin-kit': 0.4.0 + '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -25148,7 +25083,7 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -25179,7 +25114,7 @@ snapshots: esprima@4.0.1: {} - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 optional: true @@ -25441,7 +25376,7 @@ snapshots: fast-xml-parser@5.2.5: dependencies: - strnum: 2.1.1 + strnum: 2.1.2 fastify@5.6.2: dependencies: @@ -25601,7 +25536,7 @@ snapshots: fontkit@2.0.4: dependencies: - '@swc/helpers': 0.5.15 + '@swc/helpers': 0.5.18 brotli: 1.3.3 clone: 2.1.2 dfa: 1.2.0 @@ -25616,7 +25551,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.3)(esbuild@0.25.12)): + fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.3(@swc/helpers@0.5.18))(esbuild@0.25.12)): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 @@ -25631,7 +25566,7 @@ snapshots: semver: 7.7.3 tapable: 2.2.2 typescript: 5.9.3 - webpack: 5.104.1(@swc/core@1.15.3)(esbuild@0.25.12) + webpack: 5.104.1(@swc/core@1.15.3(@swc/helpers@0.5.18))(esbuild@0.25.12) form-data-encoder@2.1.4: {} @@ -25685,7 +25620,7 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3): + fumadocs-core@16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3): dependencies: '@formatjs/intl-localematcher': 0.6.2 '@orama/orama': 3.1.16 @@ -25708,21 +25643,21 @@ snapshots: optionalDependencies: '@types/react': 19.1.13 lucide-react: 0.555.0(react@19.2.3) - next: 16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) react-router: 7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - supports-color - fumadocs-mdx@14.0.4(fumadocs-core@16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + fumadocs-mdx@14.0.4(fumadocs-core@16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@mdx-js/mdx': 3.1.1 '@standard-schema/spec': 1.0.0 chokidar: 5.0.0 esbuild: 0.27.2 estree-util-value-to-estree: 3.5.0 - fumadocs-core: 16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) + fumadocs-core: 16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) js-yaml: 4.1.1 lru-cache: 11.2.2 mdast-util-to-markdown: 2.1.2 @@ -25737,16 +25672,16 @@ snapshots: vfile: 6.0.3 zod: 4.1.12 optionalDependencies: - next: 16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 vite: 7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - fumadocs-typescript@4.0.13(@types/react@19.1.13)(fumadocs-core@16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(fumadocs-ui@16.2.2(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18))(typescript@5.9.3): + fumadocs-typescript@4.0.13(@types/react@19.1.13)(fumadocs-core@16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(fumadocs-ui@16.2.2(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18))(typescript@5.9.3): dependencies: estree-util-value-to-estree: 3.5.0 - fumadocs-core: 16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) + fumadocs-core: 16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) hast-util-to-estree: 3.1.3 hast-util-to-jsx-runtime: 2.3.6 remark: 15.0.1 @@ -25757,11 +25692,11 @@ snapshots: unist-util-visit: 5.0.0 optionalDependencies: '@types/react': 19.1.13 - fumadocs-ui: 16.2.2(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18) + fumadocs-ui: 16.2.2(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18) transitivePeerDependencies: - supports-color - fumadocs-ui@16.2.2(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18): + fumadocs-ui@16.2.2(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18): dependencies: '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -25774,7 +25709,7 @@ snapshots: '@radix-ui/react-slot': 1.2.4(@types/react@19.1.13)(react@19.2.3) '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) class-variance-authority: 0.7.1 - fumadocs-core: 16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) + fumadocs-core: 16.2.2(@types/react@19.1.13)(lucide-react@0.555.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) lodash.merge: 4.6.2 next-themes: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) postcss-selector-parser: 7.1.1 @@ -25785,7 +25720,7 @@ snapshots: tailwind-merge: 3.4.0 optionalDependencies: '@types/react': 19.1.13 - next: 16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) tailwindcss: 4.1.18 transitivePeerDependencies: - '@mixedbread/sdk' @@ -25862,6 +25797,11 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-tsconfig@4.13.6: + dependencies: + resolve-pkg-maps: 1.0.0 + optional: true + giget@2.0.0: dependencies: citty: 0.1.6 @@ -27731,50 +27671,52 @@ snapshots: transitivePeerDependencies: - supports-color - next@16.0.10(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + next@16.1.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - '@next/env': 16.0.10 + '@next/env': 16.1.6 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001751 + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001769 postcss: 8.4.31 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) styled-jsx: 5.1.6(@babel/core@7.28.4)(react@19.2.3) optionalDependencies: - '@next/swc-darwin-arm64': 16.0.10 - '@next/swc-darwin-x64': 16.0.10 - '@next/swc-linux-arm64-gnu': 16.0.10 - '@next/swc-linux-arm64-musl': 16.0.10 - '@next/swc-linux-x64-gnu': 16.0.10 - '@next/swc-linux-x64-musl': 16.0.10 - '@next/swc-win32-arm64-msvc': 16.0.10 - '@next/swc-win32-x64-msvc': 16.0.10 + '@next/swc-darwin-arm64': 16.1.6 + '@next/swc-darwin-x64': 16.1.6 + '@next/swc-linux-arm64-gnu': 16.1.6 + '@next/swc-linux-arm64-musl': 16.1.6 + '@next/swc-linux-x64-gnu': 16.1.6 + '@next/swc-linux-x64-musl': 16.1.6 + '@next/swc-win32-arm64-msvc': 16.1.6 + '@next/swc-win32-x64-msvc': 16.1.6 '@opentelemetry/api': 1.9.0 - sharp: 0.34.4 + sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@next/env': 16.0.10 + '@next/env': 16.1.6 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001751 + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001769 postcss: 8.4.31 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) styled-jsx: 5.1.6(react@19.1.0) optionalDependencies: - '@next/swc-darwin-arm64': 16.0.10 - '@next/swc-darwin-x64': 16.0.10 - '@next/swc-linux-arm64-gnu': 16.0.10 - '@next/swc-linux-arm64-musl': 16.0.10 - '@next/swc-linux-x64-gnu': 16.0.10 - '@next/swc-linux-x64-musl': 16.0.10 - '@next/swc-win32-arm64-msvc': 16.0.10 - '@next/swc-win32-x64-msvc': 16.0.10 + '@next/swc-darwin-arm64': 16.1.6 + '@next/swc-darwin-x64': 16.1.6 + '@next/swc-linux-arm64-gnu': 16.1.6 + '@next/swc-linux-arm64-musl': 16.1.6 + '@next/swc-linux-x64-gnu': 16.1.6 + '@next/swc-linux-x64-musl': 16.1.6 + '@next/swc-win32-arm64-msvc': 16.1.6 + '@next/swc-win32-x64-msvc': 16.1.6 '@opentelemetry/api': 1.9.0 - sharp: 0.34.4 + sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -27784,7 +27726,7 @@ snapshots: '@next/env': 16.1.6 '@swc/helpers': 0.5.15 baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001766 + caniuse-lite: 1.0.30001769 postcss: 8.4.31 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -28111,7 +28053,7 @@ snapshots: dependencies: '@types/nlcst': 2.0.3 - node-abi@3.78.0: + node-abi@3.87.0: dependencies: semver: 7.7.3 optional: true @@ -28194,12 +28136,12 @@ snapshots: dependencies: boolbase: 1.0.0 - nuqs@2.8.3(next@16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.10.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0): + nuqs@2.8.3(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.10.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0): dependencies: '@standard-schema/spec': 1.0.0 react: 19.1.0 optionalDependencies: - next: 16.0.10(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-router: 7.10.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) nuxt@4.0.0(@biomejs/biome@2.3.3)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.19.0)(@vercel/blob@2.0.0)(@vercel/functions@3.1.4(@aws-sdk/credential-provider-web-identity@3.844.0))(@vue/compiler-sfc@3.5.22)(better-sqlite3@11.10.0)(db0@0.3.4(better-sqlite3@11.10.0)(drizzle-orm@0.44.7(@opentelemetry/api@1.9.0)(better-sqlite3@11.10.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.44.7(@opentelemetry/api@1.9.0)(better-sqlite3@11.10.0)(pg@8.16.3)(postgres@3.4.7))(eslint@9.38.0(jiti@2.6.1))(ioredis@5.8.2)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.0)(tsx@4.20.6)(typescript@5.9.3)(vite@7.1.12(@types/node@22.19.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(yaml@2.8.1): @@ -29247,7 +29189,7 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.78.0 + node-abi: 3.87.0 pump: 3.0.3 rc: 1.2.8 simple-get: 4.0.1 @@ -29596,7 +29538,7 @@ snapshots: react-router@7.10.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - cookie: 1.0.2 + cookie: 1.1.1 react: 19.1.0 set-cookie-parser: 2.7.2 optionalDependencies: @@ -29605,7 +29547,7 @@ snapshots: react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - cookie: 1.0.2 + cookie: 1.1.1 react: 19.2.3 set-cookie-parser: 2.7.2 optionalDependencies: @@ -29962,7 +29904,7 @@ snapshots: dependencies: debug: 4.4.3(supports-color@8.1.1) module-details-from-path: 1.0.4 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color @@ -29982,6 +29924,12 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + resolve@2.0.0-next.5: dependencies: is-core-module: 2.16.1 @@ -30651,7 +30599,7 @@ snapshots: dependencies: js-tokens: 9.0.1 - strnum@2.1.1: {} + strnum@2.1.2: {} strtok3@10.3.4: dependencies: @@ -30846,16 +30794,16 @@ snapshots: ansi-escapes: 7.0.0 supports-hyperlinks: 4.3.0 - terser-webpack-plugin@5.3.16(@swc/core@1.15.3)(esbuild@0.25.12)(webpack@5.104.1(@swc/core@1.15.3)(esbuild@0.25.12)): + terser-webpack-plugin@5.3.16(@swc/core@1.15.3(@swc/helpers@0.5.18))(esbuild@0.25.12)(webpack@5.104.1(@swc/core@1.15.3(@swc/helpers@0.5.18))(esbuild@0.25.12)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.44.0 - webpack: 5.104.1(@swc/core@1.15.3)(esbuild@0.25.12) + webpack: 5.104.1(@swc/core@1.15.3(@swc/helpers@0.5.18))(esbuild@0.25.12) optionalDependencies: - '@swc/core': 1.15.3 + '@swc/core': 1.15.3(@swc/helpers@0.5.18) esbuild: 0.25.12 terser@5.44.0: @@ -31012,7 +30960,7 @@ snapshots: tsx@4.20.6: dependencies: esbuild: 0.25.12 - get-tsconfig: 4.12.0 + get-tsconfig: 4.13.6 optionalDependencies: fsevents: 2.3.3 optional: true @@ -31924,7 +31872,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.104.1(@swc/core@1.15.3)(esbuild@0.25.12): + webpack@5.104.1(@swc/core@1.15.3(@swc/helpers@0.5.18))(esbuild@0.25.12): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -31948,7 +31896,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.3)(esbuild@0.25.12)(webpack@5.104.1(@swc/core@1.15.3)(esbuild@0.25.12)) + terser-webpack-plugin: 5.3.16(@swc/core@1.15.3(@swc/helpers@0.5.18))(esbuild@0.25.12)(webpack@5.104.1(@swc/core@1.15.3(@swc/helpers@0.5.18))(esbuild@0.25.12)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: