next 15.3.0-canary.6 → 15.3.0-canary.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/create-compiler-aliases.js +9 -0
  3. package/dist/build/create-compiler-aliases.js.map +1 -1
  4. package/dist/build/index.js +2 -2
  5. package/dist/build/swc/index.js +1 -1
  6. package/dist/build/webpack/plugins/define-env-plugin.js +1 -0
  7. package/dist/build/webpack/plugins/define-env-plugin.js.map +1 -1
  8. package/dist/build/webpack-config.js +4 -6
  9. package/dist/build/webpack-config.js.map +1 -1
  10. package/dist/client/app-bootstrap.js +1 -1
  11. package/dist/client/app-index.js +1 -0
  12. package/dist/client/app-index.js.map +1 -1
  13. package/dist/client/app-next-dev.d.ts +1 -0
  14. package/dist/client/app-next-dev.js +1 -0
  15. package/dist/client/app-next-dev.js.map +1 -1
  16. package/dist/client/app-next-turbopack.d.ts +1 -1
  17. package/dist/client/app-next-turbopack.js +1 -0
  18. package/dist/client/app-next-turbopack.js.map +1 -1
  19. package/dist/client/app-next.d.ts +1 -0
  20. package/dist/client/app-next.js +1 -0
  21. package/dist/client/app-next.js.map +1 -1
  22. package/dist/client/components/react-dev-overlay/ui/components/errors/dev-tools-indicator/dev-tools-info/user-preferences.js +2 -2
  23. package/dist/client/components/react-dev-overlay/ui/components/errors/dev-tools-indicator/dev-tools-info/user-preferences.js.map +1 -1
  24. package/dist/client/index.d.ts +1 -0
  25. package/dist/client/index.js +2 -1
  26. package/dist/client/index.js.map +1 -1
  27. package/dist/client/next-turbopack.d.ts +1 -1
  28. package/dist/client/next-turbopack.js +1 -1
  29. package/dist/client/next-turbopack.js.map +1 -1
  30. package/dist/client/next.d.ts +1 -0
  31. package/dist/client/next.js +1 -0
  32. package/dist/client/next.js.map +1 -1
  33. package/dist/client/page-bootstrap.d.ts +1 -0
  34. package/dist/client/page-bootstrap.js +1 -0
  35. package/dist/client/page-bootstrap.js.map +1 -1
  36. package/dist/compiled/next-server/app-page-experimental.runtime.dev.js +2 -2
  37. package/dist/compiled/next-server/app-page-experimental.runtime.dev.js.map +1 -1
  38. package/dist/compiled/next-server/app-page.runtime.dev.js +2 -2
  39. package/dist/compiled/next-server/app-page.runtime.dev.js.map +1 -1
  40. package/dist/compiled/next-server/server.runtime.prod.js +4 -4
  41. package/dist/compiled/next-server/server.runtime.prod.js.map +1 -1
  42. package/dist/esm/build/create-compiler-aliases.js +9 -0
  43. package/dist/esm/build/create-compiler-aliases.js.map +1 -1
  44. package/dist/esm/build/index.js +2 -2
  45. package/dist/esm/build/swc/index.js +1 -1
  46. package/dist/esm/build/webpack/plugins/define-env-plugin.js +1 -0
  47. package/dist/esm/build/webpack/plugins/define-env-plugin.js.map +1 -1
  48. package/dist/esm/build/webpack-config.js +5 -7
  49. package/dist/esm/build/webpack-config.js.map +1 -1
  50. package/dist/esm/client/app-bootstrap.js +1 -1
  51. package/dist/esm/client/app-index.js +1 -0
  52. package/dist/esm/client/app-index.js.map +1 -1
  53. package/dist/esm/client/app-next-dev.js +1 -0
  54. package/dist/esm/client/app-next-dev.js.map +1 -1
  55. package/dist/esm/client/app-next-turbopack.js +1 -0
  56. package/dist/esm/client/app-next-turbopack.js.map +1 -1
  57. package/dist/esm/client/app-next.js +1 -0
  58. package/dist/esm/client/app-next.js.map +1 -1
  59. package/dist/esm/client/components/react-dev-overlay/ui/components/errors/dev-tools-indicator/dev-tools-info/user-preferences.js +2 -2
  60. package/dist/esm/client/components/react-dev-overlay/ui/components/errors/dev-tools-indicator/dev-tools-info/user-preferences.js.map +1 -1
  61. package/dist/esm/client/index.js +2 -1
  62. package/dist/esm/client/index.js.map +1 -1
  63. package/dist/esm/client/next-turbopack.js +1 -0
  64. package/dist/esm/client/next-turbopack.js.map +1 -1
  65. package/dist/esm/client/next.js +1 -0
  66. package/dist/esm/client/next.js.map +1 -1
  67. package/dist/esm/client/page-bootstrap.js +1 -0
  68. package/dist/esm/client/page-bootstrap.js.map +1 -1
  69. package/dist/esm/lib/require-instrumentation-client.js +10 -0
  70. package/dist/esm/lib/require-instrumentation-client.js.map +1 -0
  71. package/dist/esm/server/base-server.js +2 -1
  72. package/dist/esm/server/base-server.js.map +1 -1
  73. package/dist/esm/server/config-schema.js +2 -1
  74. package/dist/esm/server/config-schema.js.map +1 -1
  75. package/dist/esm/server/config-shared.js.map +1 -1
  76. package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
  77. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  78. package/dist/esm/server/lib/app-info-log.js +1 -1
  79. package/dist/esm/server/lib/decode-query-path-parameter.js +16 -0
  80. package/dist/esm/server/lib/decode-query-path-parameter.js.map +1 -0
  81. package/dist/esm/server/lib/start-server.js +1 -1
  82. package/dist/esm/server/typescript/index.js +7 -4
  83. package/dist/esm/server/typescript/index.js.map +1 -1
  84. package/dist/esm/shared/lib/canary-only.js +1 -1
  85. package/dist/lib/require-instrumentation-client.d.ts +6 -0
  86. package/dist/lib/require-instrumentation-client.js +11 -0
  87. package/dist/lib/require-instrumentation-client.js.map +1 -0
  88. package/dist/server/base-server.js +2 -1
  89. package/dist/server/base-server.js.map +1 -1
  90. package/dist/server/config-schema.js +2 -1
  91. package/dist/server/config-schema.js.map +1 -1
  92. package/dist/server/config-shared.d.ts +8 -0
  93. package/dist/server/config-shared.js.map +1 -1
  94. package/dist/server/dev/hot-reloader-turbopack.js +1 -1
  95. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  96. package/dist/server/lib/app-info-log.js +1 -1
  97. package/dist/server/lib/decode-query-path-parameter.d.ts +7 -0
  98. package/dist/server/lib/decode-query-path-parameter.js +26 -0
  99. package/dist/server/lib/decode-query-path-parameter.js.map +1 -0
  100. package/dist/server/lib/start-server.js +1 -1
  101. package/dist/server/typescript/index.js +7 -4
  102. package/dist/server/typescript/index.js.map +1 -1
  103. package/dist/shared/lib/canary-only.js +1 -1
  104. package/dist/telemetry/anonymous-meta.js +1 -1
  105. package/dist/telemetry/events/session-stopped.js +2 -2
  106. package/dist/telemetry/events/version.js +2 -2
  107. package/package.json +15 -15
@@ -42,10 +42,13 @@ const createTSPlugin = ({ typescript: ts })=>{
42
42
  const x = info.languageService[k];
43
43
  proxy[k] = (...args)=>x.apply(info.languageService, args);
44
44
  }
45
- const pluginOptions = info.config ?? {
46
- enabled: true
47
- };
48
- if (!pluginOptions.enabled) {
45
+ // Get plugin options
46
+ // config is the plugin options from the user's tsconfig.json
47
+ // e.g. { "plugins": [{ "name": "next", "enabled": true }] }
48
+ // config will be { "name": "next", "enabled": true }
49
+ // The default user config is { "name": "next" }
50
+ const isPluginEnabled = info.config.enabled ?? true;
51
+ if (!isPluginEnabled) {
49
52
  return proxy;
50
53
  }
51
54
  // Auto completion
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/server/typescript/index.ts"],"sourcesContent":["/**\n * This is a TypeScript language service plugin for Next.js app directory,\n * it provides the following features:\n *\n * - Warns about disallowed React APIs in server components.\n * - Warns about disallowed layout and page exports.\n * - Autocompletion for entry configurations.\n * - Hover hint and docs for entry configurations.\n */\n\nimport {\n init,\n getEntryInfo,\n isAppEntryFile,\n isDefaultFunctionExport,\n isPositionInsideNode,\n getSource,\n isInsideApp,\n} from './utils'\nimport { NEXT_TS_ERRORS } from './constant'\n\nimport entryConfig from './rules/config'\nimport serverLayer from './rules/server'\nimport entryDefault from './rules/entry'\nimport clientBoundary from './rules/client-boundary'\nimport serverBoundary from './rules/server-boundary'\nimport metadata from './rules/metadata'\nimport errorEntry from './rules/error'\nimport type tsModule from 'typescript/lib/tsserverlibrary'\n\ntype NextTypePluginOptions = {\n enabled?: boolean\n}\n\nexport const createTSPlugin: tsModule.server.PluginModuleFactory = ({\n typescript: ts,\n}) => {\n function create(info: tsModule.server.PluginCreateInfo) {\n init({\n ts,\n info,\n })\n\n // Set up decorator object\n const proxy = Object.create(null)\n for (let k of Object.keys(info.languageService)) {\n const x = (info.languageService as any)[k]\n proxy[k] = (...args: Array<{}>) => x.apply(info.languageService, args)\n }\n\n const pluginOptions: NextTypePluginOptions = info.config ?? {\n enabled: true,\n }\n if (!pluginOptions.enabled) {\n return proxy\n }\n\n // Auto completion\n proxy.getCompletionsAtPosition = (\n fileName: string,\n position: number,\n options: any\n ) => {\n let prior = info.languageService.getCompletionsAtPosition(\n fileName,\n position,\n options\n ) || {\n isGlobalCompletion: false,\n isMemberCompletion: false,\n isNewIdentifierLocation: false,\n entries: [],\n }\n if (!isAppEntryFile(fileName)) return prior\n\n // If it's a server entry.\n const entryInfo = getEntryInfo(fileName)\n if (!entryInfo.client) {\n // Remove specified entries from completion list\n prior.entries = serverLayer.filterCompletionsAtPosition(prior.entries)\n\n // Provide autocompletion for metadata fields\n prior = metadata.filterCompletionsAtPosition(\n fileName,\n position,\n options,\n prior\n )\n }\n\n // Add auto completions for export configs.\n entryConfig.addCompletionsAtPosition(fileName, position, prior)\n\n const source = getSource(fileName)\n if (!source) return prior\n\n ts.forEachChild(source!, (node) => {\n // Auto completion for default export function's props.\n if (\n isPositionInsideNode(position, node) &&\n isDefaultFunctionExport(node)\n ) {\n prior.entries.push(\n ...entryDefault.getCompletionsAtPosition(\n fileName,\n node as tsModule.FunctionDeclaration,\n position\n )\n )\n }\n })\n\n return prior\n }\n\n // Show auto completion details\n proxy.getCompletionEntryDetails = (\n fileName: string,\n position: number,\n entryName: string,\n formatOptions: tsModule.FormatCodeOptions,\n source: string,\n preferences: tsModule.UserPreferences,\n data: tsModule.CompletionEntryData\n ) => {\n const entryCompletionEntryDetails = entryConfig.getCompletionEntryDetails(\n entryName,\n data\n )\n if (entryCompletionEntryDetails) return entryCompletionEntryDetails\n\n const metadataCompletionEntryDetails = metadata.getCompletionEntryDetails(\n fileName,\n position,\n entryName,\n formatOptions,\n source,\n preferences,\n data\n )\n if (metadataCompletionEntryDetails) return metadataCompletionEntryDetails\n\n return info.languageService.getCompletionEntryDetails(\n fileName,\n position,\n entryName,\n formatOptions,\n source,\n preferences,\n data\n )\n }\n\n // Quick info\n proxy.getQuickInfoAtPosition = (fileName: string, position: number) => {\n const prior = info.languageService.getQuickInfoAtPosition(\n fileName,\n position\n )\n if (!isAppEntryFile(fileName)) return prior\n\n // Remove type suggestions for disallowed APIs in server components.\n const entryInfo = getEntryInfo(fileName)\n if (!entryInfo.client) {\n const definitions = info.languageService.getDefinitionAtPosition(\n fileName,\n position\n )\n if (\n definitions &&\n serverLayer.hasDisallowedReactAPIDefinition(definitions)\n ) {\n return\n }\n\n const metadataInfo = metadata.getQuickInfoAtPosition(fileName, position)\n if (metadataInfo) return metadataInfo\n }\n\n const overridden = entryConfig.getQuickInfoAtPosition(fileName, position)\n if (overridden) return overridden\n\n return prior\n }\n\n // Show errors for disallowed imports\n proxy.getSemanticDiagnostics = (fileName: string) => {\n const prior = info.languageService.getSemanticDiagnostics(fileName)\n const source = getSource(fileName)\n if (!source) return prior\n\n let isClientEntry = false\n let isServerEntry = false\n const isAppEntry = isAppEntryFile(fileName)\n\n try {\n const entryInfo = getEntryInfo(fileName, true)\n isClientEntry = entryInfo.client\n isServerEntry = entryInfo.server\n } catch (e: any) {\n prior.push({\n file: source,\n category: ts.DiagnosticCategory.Error,\n code: NEXT_TS_ERRORS.MISPLACED_ENTRY_DIRECTIVE,\n ...e,\n })\n isClientEntry = false\n isServerEntry = false\n }\n\n if (isInsideApp(fileName)) {\n const errorDiagnostic = errorEntry.getSemanticDiagnostics(\n source!,\n isClientEntry\n )\n prior.push(...errorDiagnostic)\n }\n\n ts.forEachChild(source!, (node) => {\n if (ts.isImportDeclaration(node)) {\n // import ...\n if (isAppEntry) {\n if (!isClientEntry || isServerEntry) {\n // Check if it has valid imports in the server layer\n const diagnostics =\n serverLayer.getSemanticDiagnosticsForImportDeclaration(\n source,\n node\n )\n prior.push(...diagnostics)\n }\n }\n } else if (\n ts.isVariableStatement(node) &&\n node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)\n ) {\n // export const ...\n if (isAppEntry) {\n // Check if it has correct option exports\n const diagnostics =\n entryConfig.getSemanticDiagnosticsForExportVariableStatement(\n source,\n node\n )\n const metadataDiagnostics = isClientEntry\n ? metadata.getSemanticDiagnosticsForExportVariableStatementInClientEntry(\n fileName,\n node\n )\n : metadata.getSemanticDiagnosticsForExportVariableStatement(\n fileName,\n node\n )\n prior.push(...diagnostics, ...metadataDiagnostics)\n }\n\n if (isClientEntry) {\n prior.push(\n ...clientBoundary.getSemanticDiagnosticsForExportVariableStatement(\n source,\n node\n )\n )\n }\n\n if (isServerEntry) {\n prior.push(\n ...serverBoundary.getSemanticDiagnosticsForExportVariableStatement(\n source,\n node\n )\n )\n }\n } else if (isDefaultFunctionExport(node)) {\n // export default function ...\n if (isAppEntry) {\n const diagnostics = entryDefault.getSemanticDiagnostics(\n fileName,\n source,\n node\n )\n prior.push(...diagnostics)\n }\n\n if (isClientEntry) {\n prior.push(\n ...clientBoundary.getSemanticDiagnosticsForFunctionExport(\n source,\n node\n )\n )\n }\n\n if (isServerEntry) {\n prior.push(\n ...serverBoundary.getSemanticDiagnosticsForFunctionExport(\n source,\n node\n )\n )\n }\n } else if (\n ts.isFunctionDeclaration(node) &&\n node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)\n ) {\n // export function ...\n if (isAppEntry) {\n const metadataDiagnostics = isClientEntry\n ? metadata.getSemanticDiagnosticsForExportVariableStatementInClientEntry(\n fileName,\n node\n )\n : metadata.getSemanticDiagnosticsForExportVariableStatement(\n fileName,\n node\n )\n prior.push(...metadataDiagnostics)\n }\n\n if (isClientEntry) {\n prior.push(\n ...clientBoundary.getSemanticDiagnosticsForFunctionExport(\n source,\n node\n )\n )\n }\n\n if (isServerEntry) {\n prior.push(\n ...serverBoundary.getSemanticDiagnosticsForFunctionExport(\n source,\n node\n )\n )\n }\n } else if (ts.isExportDeclaration(node)) {\n // export { ... }\n if (isAppEntry) {\n const metadataDiagnostics = isClientEntry\n ? metadata.getSemanticDiagnosticsForExportDeclarationInClientEntry(\n fileName,\n node\n )\n : metadata.getSemanticDiagnosticsForExportDeclaration(\n fileName,\n node\n )\n prior.push(...metadataDiagnostics)\n }\n\n if (isServerEntry) {\n prior.push(\n ...serverBoundary.getSemanticDiagnosticsForExportDeclaration(\n source,\n node\n )\n )\n }\n }\n })\n\n return prior\n }\n\n // Get definition and link for specific node\n proxy.getDefinitionAndBoundSpan = (fileName: string, position: number) => {\n const entryInfo = getEntryInfo(fileName)\n if (isAppEntryFile(fileName) && !entryInfo.client) {\n const metadataDefinition = metadata.getDefinitionAndBoundSpan(\n fileName,\n position\n )\n if (metadataDefinition) return metadataDefinition\n }\n\n return info.languageService.getDefinitionAndBoundSpan(fileName, position)\n }\n\n return proxy\n }\n\n return { create }\n}\n"],"names":["createTSPlugin","typescript","ts","create","info","init","proxy","Object","k","keys","languageService","x","args","apply","pluginOptions","config","enabled","getCompletionsAtPosition","fileName","position","options","prior","isGlobalCompletion","isMemberCompletion","isNewIdentifierLocation","entries","isAppEntryFile","entryInfo","getEntryInfo","client","serverLayer","filterCompletionsAtPosition","metadata","entryConfig","addCompletionsAtPosition","source","getSource","forEachChild","node","isPositionInsideNode","isDefaultFunctionExport","push","entryDefault","getCompletionEntryDetails","entryName","formatOptions","preferences","data","entryCompletionEntryDetails","metadataCompletionEntryDetails","getQuickInfoAtPosition","definitions","getDefinitionAtPosition","hasDisallowedReactAPIDefinition","metadataInfo","overridden","getSemanticDiagnostics","isClientEntry","isServerEntry","isAppEntry","server","e","file","category","DiagnosticCategory","Error","code","NEXT_TS_ERRORS","MISPLACED_ENTRY_DIRECTIVE","isInsideApp","errorDiagnostic","errorEntry","isImportDeclaration","diagnostics","getSemanticDiagnosticsForImportDeclaration","isVariableStatement","modifiers","some","m","kind","SyntaxKind","ExportKeyword","getSemanticDiagnosticsForExportVariableStatement","metadataDiagnostics","getSemanticDiagnosticsForExportVariableStatementInClientEntry","clientBoundary","serverBoundary","getSemanticDiagnosticsForFunctionExport","isFunctionDeclaration","isExportDeclaration","getSemanticDiagnosticsForExportDeclarationInClientEntry","getSemanticDiagnosticsForExportDeclaration","getDefinitionAndBoundSpan","metadataDefinition"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/server/typescript/index.ts"],"sourcesContent":["/**\n * This is a TypeScript language service plugin for Next.js app directory,\n * it provides the following features:\n *\n * - Warns about disallowed React APIs in server components.\n * - Warns about disallowed layout and page exports.\n * - Autocompletion for entry configurations.\n * - Hover hint and docs for entry configurations.\n */\n\nimport {\n init,\n getEntryInfo,\n isAppEntryFile,\n isDefaultFunctionExport,\n isPositionInsideNode,\n getSource,\n isInsideApp,\n} from './utils'\nimport { NEXT_TS_ERRORS } from './constant'\n\nimport entryConfig from './rules/config'\nimport serverLayer from './rules/server'\nimport entryDefault from './rules/entry'\nimport clientBoundary from './rules/client-boundary'\nimport serverBoundary from './rules/server-boundary'\nimport metadata from './rules/metadata'\nimport errorEntry from './rules/error'\nimport type tsModule from 'typescript/lib/tsserverlibrary'\n\nexport const createTSPlugin: tsModule.server.PluginModuleFactory = ({\n typescript: ts,\n}) => {\n function create(info: tsModule.server.PluginCreateInfo) {\n init({\n ts,\n info,\n })\n\n // Set up decorator object\n const proxy = Object.create(null)\n for (let k of Object.keys(info.languageService)) {\n const x = (info.languageService as any)[k]\n proxy[k] = (...args: Array<{}>) => x.apply(info.languageService, args)\n }\n\n // Get plugin options\n // config is the plugin options from the user's tsconfig.json\n // e.g. { \"plugins\": [{ \"name\": \"next\", \"enabled\": true }] }\n // config will be { \"name\": \"next\", \"enabled\": true }\n // The default user config is { \"name\": \"next\" }\n const isPluginEnabled = info.config.enabled ?? true\n\n if (!isPluginEnabled) {\n return proxy\n }\n\n // Auto completion\n proxy.getCompletionsAtPosition = (\n fileName: string,\n position: number,\n options: any\n ) => {\n let prior = info.languageService.getCompletionsAtPosition(\n fileName,\n position,\n options\n ) || {\n isGlobalCompletion: false,\n isMemberCompletion: false,\n isNewIdentifierLocation: false,\n entries: [],\n }\n if (!isAppEntryFile(fileName)) return prior\n\n // If it's a server entry.\n const entryInfo = getEntryInfo(fileName)\n if (!entryInfo.client) {\n // Remove specified entries from completion list\n prior.entries = serverLayer.filterCompletionsAtPosition(prior.entries)\n\n // Provide autocompletion for metadata fields\n prior = metadata.filterCompletionsAtPosition(\n fileName,\n position,\n options,\n prior\n )\n }\n\n // Add auto completions for export configs.\n entryConfig.addCompletionsAtPosition(fileName, position, prior)\n\n const source = getSource(fileName)\n if (!source) return prior\n\n ts.forEachChild(source!, (node) => {\n // Auto completion for default export function's props.\n if (\n isPositionInsideNode(position, node) &&\n isDefaultFunctionExport(node)\n ) {\n prior.entries.push(\n ...entryDefault.getCompletionsAtPosition(\n fileName,\n node as tsModule.FunctionDeclaration,\n position\n )\n )\n }\n })\n\n return prior\n }\n\n // Show auto completion details\n proxy.getCompletionEntryDetails = (\n fileName: string,\n position: number,\n entryName: string,\n formatOptions: tsModule.FormatCodeOptions,\n source: string,\n preferences: tsModule.UserPreferences,\n data: tsModule.CompletionEntryData\n ) => {\n const entryCompletionEntryDetails = entryConfig.getCompletionEntryDetails(\n entryName,\n data\n )\n if (entryCompletionEntryDetails) return entryCompletionEntryDetails\n\n const metadataCompletionEntryDetails = metadata.getCompletionEntryDetails(\n fileName,\n position,\n entryName,\n formatOptions,\n source,\n preferences,\n data\n )\n if (metadataCompletionEntryDetails) return metadataCompletionEntryDetails\n\n return info.languageService.getCompletionEntryDetails(\n fileName,\n position,\n entryName,\n formatOptions,\n source,\n preferences,\n data\n )\n }\n\n // Quick info\n proxy.getQuickInfoAtPosition = (fileName: string, position: number) => {\n const prior = info.languageService.getQuickInfoAtPosition(\n fileName,\n position\n )\n if (!isAppEntryFile(fileName)) return prior\n\n // Remove type suggestions for disallowed APIs in server components.\n const entryInfo = getEntryInfo(fileName)\n if (!entryInfo.client) {\n const definitions = info.languageService.getDefinitionAtPosition(\n fileName,\n position\n )\n if (\n definitions &&\n serverLayer.hasDisallowedReactAPIDefinition(definitions)\n ) {\n return\n }\n\n const metadataInfo = metadata.getQuickInfoAtPosition(fileName, position)\n if (metadataInfo) return metadataInfo\n }\n\n const overridden = entryConfig.getQuickInfoAtPosition(fileName, position)\n if (overridden) return overridden\n\n return prior\n }\n\n // Show errors for disallowed imports\n proxy.getSemanticDiagnostics = (fileName: string) => {\n const prior = info.languageService.getSemanticDiagnostics(fileName)\n const source = getSource(fileName)\n if (!source) return prior\n\n let isClientEntry = false\n let isServerEntry = false\n const isAppEntry = isAppEntryFile(fileName)\n\n try {\n const entryInfo = getEntryInfo(fileName, true)\n isClientEntry = entryInfo.client\n isServerEntry = entryInfo.server\n } catch (e: any) {\n prior.push({\n file: source,\n category: ts.DiagnosticCategory.Error,\n code: NEXT_TS_ERRORS.MISPLACED_ENTRY_DIRECTIVE,\n ...e,\n })\n isClientEntry = false\n isServerEntry = false\n }\n\n if (isInsideApp(fileName)) {\n const errorDiagnostic = errorEntry.getSemanticDiagnostics(\n source!,\n isClientEntry\n )\n prior.push(...errorDiagnostic)\n }\n\n ts.forEachChild(source!, (node) => {\n if (ts.isImportDeclaration(node)) {\n // import ...\n if (isAppEntry) {\n if (!isClientEntry || isServerEntry) {\n // Check if it has valid imports in the server layer\n const diagnostics =\n serverLayer.getSemanticDiagnosticsForImportDeclaration(\n source,\n node\n )\n prior.push(...diagnostics)\n }\n }\n } else if (\n ts.isVariableStatement(node) &&\n node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)\n ) {\n // export const ...\n if (isAppEntry) {\n // Check if it has correct option exports\n const diagnostics =\n entryConfig.getSemanticDiagnosticsForExportVariableStatement(\n source,\n node\n )\n const metadataDiagnostics = isClientEntry\n ? metadata.getSemanticDiagnosticsForExportVariableStatementInClientEntry(\n fileName,\n node\n )\n : metadata.getSemanticDiagnosticsForExportVariableStatement(\n fileName,\n node\n )\n prior.push(...diagnostics, ...metadataDiagnostics)\n }\n\n if (isClientEntry) {\n prior.push(\n ...clientBoundary.getSemanticDiagnosticsForExportVariableStatement(\n source,\n node\n )\n )\n }\n\n if (isServerEntry) {\n prior.push(\n ...serverBoundary.getSemanticDiagnosticsForExportVariableStatement(\n source,\n node\n )\n )\n }\n } else if (isDefaultFunctionExport(node)) {\n // export default function ...\n if (isAppEntry) {\n const diagnostics = entryDefault.getSemanticDiagnostics(\n fileName,\n source,\n node\n )\n prior.push(...diagnostics)\n }\n\n if (isClientEntry) {\n prior.push(\n ...clientBoundary.getSemanticDiagnosticsForFunctionExport(\n source,\n node\n )\n )\n }\n\n if (isServerEntry) {\n prior.push(\n ...serverBoundary.getSemanticDiagnosticsForFunctionExport(\n source,\n node\n )\n )\n }\n } else if (\n ts.isFunctionDeclaration(node) &&\n node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)\n ) {\n // export function ...\n if (isAppEntry) {\n const metadataDiagnostics = isClientEntry\n ? metadata.getSemanticDiagnosticsForExportVariableStatementInClientEntry(\n fileName,\n node\n )\n : metadata.getSemanticDiagnosticsForExportVariableStatement(\n fileName,\n node\n )\n prior.push(...metadataDiagnostics)\n }\n\n if (isClientEntry) {\n prior.push(\n ...clientBoundary.getSemanticDiagnosticsForFunctionExport(\n source,\n node\n )\n )\n }\n\n if (isServerEntry) {\n prior.push(\n ...serverBoundary.getSemanticDiagnosticsForFunctionExport(\n source,\n node\n )\n )\n }\n } else if (ts.isExportDeclaration(node)) {\n // export { ... }\n if (isAppEntry) {\n const metadataDiagnostics = isClientEntry\n ? metadata.getSemanticDiagnosticsForExportDeclarationInClientEntry(\n fileName,\n node\n )\n : metadata.getSemanticDiagnosticsForExportDeclaration(\n fileName,\n node\n )\n prior.push(...metadataDiagnostics)\n }\n\n if (isServerEntry) {\n prior.push(\n ...serverBoundary.getSemanticDiagnosticsForExportDeclaration(\n source,\n node\n )\n )\n }\n }\n })\n\n return prior\n }\n\n // Get definition and link for specific node\n proxy.getDefinitionAndBoundSpan = (fileName: string, position: number) => {\n const entryInfo = getEntryInfo(fileName)\n if (isAppEntryFile(fileName) && !entryInfo.client) {\n const metadataDefinition = metadata.getDefinitionAndBoundSpan(\n fileName,\n position\n )\n if (metadataDefinition) return metadataDefinition\n }\n\n return info.languageService.getDefinitionAndBoundSpan(fileName, position)\n }\n\n return proxy\n }\n\n return { create }\n}\n"],"names":["createTSPlugin","typescript","ts","create","info","init","proxy","Object","k","keys","languageService","x","args","apply","isPluginEnabled","config","enabled","getCompletionsAtPosition","fileName","position","options","prior","isGlobalCompletion","isMemberCompletion","isNewIdentifierLocation","entries","isAppEntryFile","entryInfo","getEntryInfo","client","serverLayer","filterCompletionsAtPosition","metadata","entryConfig","addCompletionsAtPosition","source","getSource","forEachChild","node","isPositionInsideNode","isDefaultFunctionExport","push","entryDefault","getCompletionEntryDetails","entryName","formatOptions","preferences","data","entryCompletionEntryDetails","metadataCompletionEntryDetails","getQuickInfoAtPosition","definitions","getDefinitionAtPosition","hasDisallowedReactAPIDefinition","metadataInfo","overridden","getSemanticDiagnostics","isClientEntry","isServerEntry","isAppEntry","server","e","file","category","DiagnosticCategory","Error","code","NEXT_TS_ERRORS","MISPLACED_ENTRY_DIRECTIVE","isInsideApp","errorDiagnostic","errorEntry","isImportDeclaration","diagnostics","getSemanticDiagnosticsForImportDeclaration","isVariableStatement","modifiers","some","m","kind","SyntaxKind","ExportKeyword","getSemanticDiagnosticsForExportVariableStatement","metadataDiagnostics","getSemanticDiagnosticsForExportVariableStatementInClientEntry","clientBoundary","serverBoundary","getSemanticDiagnosticsForFunctionExport","isFunctionDeclaration","isExportDeclaration","getSemanticDiagnosticsForExportDeclarationInClientEntry","getSemanticDiagnosticsForExportDeclaration","getDefinitionAndBoundSpan","metadataDefinition"],"mappings":"AAAA;;;;;;;;CAQC;;;;+BAsBYA;;;eAAAA;;;uBAZN;0BACwB;+DAEP;+DACA;8DACC;uEACE;uEACA;iEACN;8DACE;;;;;;AAGhB,MAAMA,iBAAsD,CAAC,EAClEC,YAAYC,EAAE,EACf;IACC,SAASC,OAAOC,IAAsC;QACpDC,IAAAA,WAAI,EAAC;YACHH;YACAE;QACF;QAEA,0BAA0B;QAC1B,MAAME,QAAQC,OAAOJ,MAAM,CAAC;QAC5B,KAAK,IAAIK,KAAKD,OAAOE,IAAI,CAACL,KAAKM,eAAe,EAAG;YAC/C,MAAMC,IAAI,AAACP,KAAKM,eAAe,AAAQ,CAACF,EAAE;YAC1CF,KAAK,CAACE,EAAE,GAAG,CAAC,GAAGI,OAAoBD,EAAEE,KAAK,CAACT,KAAKM,eAAe,EAAEE;QACnE;QAEA,qBAAqB;QACrB,6DAA6D;QAC7D,4DAA4D;QAC5D,qDAAqD;QACrD,gDAAgD;QAChD,MAAME,kBAAkBV,KAAKW,MAAM,CAACC,OAAO,IAAI;QAE/C,IAAI,CAACF,iBAAiB;YACpB,OAAOR;QACT;QAEA,kBAAkB;QAClBA,MAAMW,wBAAwB,GAAG,CAC/BC,UACAC,UACAC;YAEA,IAAIC,QAAQjB,KAAKM,eAAe,CAACO,wBAAwB,CACvDC,UACAC,UACAC,YACG;gBACHE,oBAAoB;gBACpBC,oBAAoB;gBACpBC,yBAAyB;gBACzBC,SAAS,EAAE;YACb;YACA,IAAI,CAACC,IAAAA,qBAAc,EAACR,WAAW,OAAOG;YAEtC,0BAA0B;YAC1B,MAAMM,YAAYC,IAAAA,mBAAY,EAACV;YAC/B,IAAI,CAACS,UAAUE,MAAM,EAAE;gBACrB,gDAAgD;gBAChDR,MAAMI,OAAO,GAAGK,eAAW,CAACC,2BAA2B,CAACV,MAAMI,OAAO;gBAErE,6CAA6C;gBAC7CJ,QAAQW,iBAAQ,CAACD,2BAA2B,CAC1Cb,UACAC,UACAC,SACAC;YAEJ;YAEA,2CAA2C;YAC3CY,eAAW,CAACC,wBAAwB,CAAChB,UAAUC,UAAUE;YAEzD,MAAMc,SAASC,IAAAA,gBAAS,EAAClB;YACzB,IAAI,CAACiB,QAAQ,OAAOd;YAEpBnB,GAAGmC,YAAY,CAACF,QAAS,CAACG;gBACxB,uDAAuD;gBACvD,IACEC,IAAAA,2BAAoB,EAACpB,UAAUmB,SAC/BE,IAAAA,8BAAuB,EAACF,OACxB;oBACAjB,MAAMI,OAAO,CAACgB,IAAI,IACbC,cAAY,CAACzB,wBAAwB,CACtCC,UACAoB,MACAnB;gBAGN;YACF;YAEA,OAAOE;QACT;QAEA,+BAA+B;QAC/Bf,MAAMqC,yBAAyB,GAAG,CAChCzB,UACAC,UACAyB,WACAC,eACAV,QACAW,aACAC;YAEA,MAAMC,8BAA8Bf,eAAW,CAACU,yBAAyB,CACvEC,WACAG;YAEF,IAAIC,6BAA6B,OAAOA;YAExC,MAAMC,iCAAiCjB,iBAAQ,CAACW,yBAAyB,CACvEzB,UACAC,UACAyB,WACAC,eACAV,QACAW,aACAC;YAEF,IAAIE,gCAAgC,OAAOA;YAE3C,OAAO7C,KAAKM,eAAe,CAACiC,yBAAyB,CACnDzB,UACAC,UACAyB,WACAC,eACAV,QACAW,aACAC;QAEJ;QAEA,aAAa;QACbzC,MAAM4C,sBAAsB,GAAG,CAAChC,UAAkBC;YAChD,MAAME,QAAQjB,KAAKM,eAAe,CAACwC,sBAAsB,CACvDhC,UACAC;YAEF,IAAI,CAACO,IAAAA,qBAAc,EAACR,WAAW,OAAOG;YAEtC,oEAAoE;YACpE,MAAMM,YAAYC,IAAAA,mBAAY,EAACV;YAC/B,IAAI,CAACS,UAAUE,MAAM,EAAE;gBACrB,MAAMsB,cAAc/C,KAAKM,eAAe,CAAC0C,uBAAuB,CAC9DlC,UACAC;gBAEF,IACEgC,eACArB,eAAW,CAACuB,+BAA+B,CAACF,cAC5C;oBACA;gBACF;gBAEA,MAAMG,eAAetB,iBAAQ,CAACkB,sBAAsB,CAAChC,UAAUC;gBAC/D,IAAImC,cAAc,OAAOA;YAC3B;YAEA,MAAMC,aAAatB,eAAW,CAACiB,sBAAsB,CAAChC,UAAUC;YAChE,IAAIoC,YAAY,OAAOA;YAEvB,OAAOlC;QACT;QAEA,qCAAqC;QACrCf,MAAMkD,sBAAsB,GAAG,CAACtC;YAC9B,MAAMG,QAAQjB,KAAKM,eAAe,CAAC8C,sBAAsB,CAACtC;YAC1D,MAAMiB,SAASC,IAAAA,gBAAS,EAAClB;YACzB,IAAI,CAACiB,QAAQ,OAAOd;YAEpB,IAAIoC,gBAAgB;YACpB,IAAIC,gBAAgB;YACpB,MAAMC,aAAajC,IAAAA,qBAAc,EAACR;YAElC,IAAI;gBACF,MAAMS,YAAYC,IAAAA,mBAAY,EAACV,UAAU;gBACzCuC,gBAAgB9B,UAAUE,MAAM;gBAChC6B,gBAAgB/B,UAAUiC,MAAM;YAClC,EAAE,OAAOC,GAAQ;gBACfxC,MAAMoB,IAAI,CAAC;oBACTqB,MAAM3B;oBACN4B,UAAU7D,GAAG8D,kBAAkB,CAACC,KAAK;oBACrCC,MAAMC,wBAAc,CAACC,yBAAyB;oBAC9C,GAAGP,CAAC;gBACN;gBACAJ,gBAAgB;gBAChBC,gBAAgB;YAClB;YAEA,IAAIW,IAAAA,kBAAW,EAACnD,WAAW;gBACzB,MAAMoD,kBAAkBC,cAAU,CAACf,sBAAsB,CACvDrB,QACAsB;gBAEFpC,MAAMoB,IAAI,IAAI6B;YAChB;YAEApE,GAAGmC,YAAY,CAACF,QAAS,CAACG;oBAgBtBA,iBAqEAA;gBApFF,IAAIpC,GAAGsE,mBAAmB,CAAClC,OAAO;oBAChC,aAAa;oBACb,IAAIqB,YAAY;wBACd,IAAI,CAACF,iBAAiBC,eAAe;4BACnC,oDAAoD;4BACpD,MAAMe,cACJ3C,eAAW,CAAC4C,0CAA0C,CACpDvC,QACAG;4BAEJjB,MAAMoB,IAAI,IAAIgC;wBAChB;oBACF;gBACF,OAAO,IACLvE,GAAGyE,mBAAmB,CAACrC,WACvBA,kBAAAA,KAAKsC,SAAS,qBAAdtC,gBAAgBuC,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAK7E,GAAG8E,UAAU,CAACC,aAAa,IAClE;oBACA,mBAAmB;oBACnB,IAAItB,YAAY;wBACd,yCAAyC;wBACzC,MAAMc,cACJxC,eAAW,CAACiD,gDAAgD,CAC1D/C,QACAG;wBAEJ,MAAM6C,sBAAsB1B,gBACxBzB,iBAAQ,CAACoD,6DAA6D,CACpElE,UACAoB,QAEFN,iBAAQ,CAACkD,gDAAgD,CACvDhE,UACAoB;wBAENjB,MAAMoB,IAAI,IAAIgC,gBAAgBU;oBAChC;oBAEA,IAAI1B,eAAe;wBACjBpC,MAAMoB,IAAI,IACL4C,uBAAc,CAACH,gDAAgD,CAChE/C,QACAG;oBAGN;oBAEA,IAAIoB,eAAe;wBACjBrC,MAAMoB,IAAI,IACL6C,uBAAc,CAACJ,gDAAgD,CAChE/C,QACAG;oBAGN;gBACF,OAAO,IAAIE,IAAAA,8BAAuB,EAACF,OAAO;oBACxC,8BAA8B;oBAC9B,IAAIqB,YAAY;wBACd,MAAMc,cAAc/B,cAAY,CAACc,sBAAsB,CACrDtC,UACAiB,QACAG;wBAEFjB,MAAMoB,IAAI,IAAIgC;oBAChB;oBAEA,IAAIhB,eAAe;wBACjBpC,MAAMoB,IAAI,IACL4C,uBAAc,CAACE,uCAAuC,CACvDpD,QACAG;oBAGN;oBAEA,IAAIoB,eAAe;wBACjBrC,MAAMoB,IAAI,IACL6C,uBAAc,CAACC,uCAAuC,CACvDpD,QACAG;oBAGN;gBACF,OAAO,IACLpC,GAAGsF,qBAAqB,CAAClD,WACzBA,mBAAAA,KAAKsC,SAAS,qBAAdtC,iBAAgBuC,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAK7E,GAAG8E,UAAU,CAACC,aAAa,IAClE;oBACA,sBAAsB;oBACtB,IAAItB,YAAY;wBACd,MAAMwB,sBAAsB1B,gBACxBzB,iBAAQ,CAACoD,6DAA6D,CACpElE,UACAoB,QAEFN,iBAAQ,CAACkD,gDAAgD,CACvDhE,UACAoB;wBAENjB,MAAMoB,IAAI,IAAI0C;oBAChB;oBAEA,IAAI1B,eAAe;wBACjBpC,MAAMoB,IAAI,IACL4C,uBAAc,CAACE,uCAAuC,CACvDpD,QACAG;oBAGN;oBAEA,IAAIoB,eAAe;wBACjBrC,MAAMoB,IAAI,IACL6C,uBAAc,CAACC,uCAAuC,CACvDpD,QACAG;oBAGN;gBACF,OAAO,IAAIpC,GAAGuF,mBAAmB,CAACnD,OAAO;oBACvC,iBAAiB;oBACjB,IAAIqB,YAAY;wBACd,MAAMwB,sBAAsB1B,gBACxBzB,iBAAQ,CAAC0D,uDAAuD,CAC9DxE,UACAoB,QAEFN,iBAAQ,CAAC2D,0CAA0C,CACjDzE,UACAoB;wBAENjB,MAAMoB,IAAI,IAAI0C;oBAChB;oBAEA,IAAIzB,eAAe;wBACjBrC,MAAMoB,IAAI,IACL6C,uBAAc,CAACK,0CAA0C,CAC1DxD,QACAG;oBAGN;gBACF;YACF;YAEA,OAAOjB;QACT;QAEA,4CAA4C;QAC5Cf,MAAMsF,yBAAyB,GAAG,CAAC1E,UAAkBC;YACnD,MAAMQ,YAAYC,IAAAA,mBAAY,EAACV;YAC/B,IAAIQ,IAAAA,qBAAc,EAACR,aAAa,CAACS,UAAUE,MAAM,EAAE;gBACjD,MAAMgE,qBAAqB7D,iBAAQ,CAAC4D,yBAAyB,CAC3D1E,UACAC;gBAEF,IAAI0E,oBAAoB,OAAOA;YACjC;YAEA,OAAOzF,KAAKM,eAAe,CAACkF,yBAAyB,CAAC1E,UAAUC;QAClE;QAEA,OAAOb;IACT;IAEA,OAAO;QAAEH;IAAO;AAClB"}
@@ -22,7 +22,7 @@ _export(exports, {
22
22
  });
23
23
  function isStableBuild() {
24
24
  var _process_env___NEXT_VERSION;
25
- return !((_process_env___NEXT_VERSION = "15.3.0-canary.6") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
25
+ return !((_process_env___NEXT_VERSION = "15.3.0-canary.8") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
26
26
  }
27
27
  class CanaryOnlyError extends Error {
28
28
  constructor(arg){
@@ -81,7 +81,7 @@ function getAnonymousMeta() {
81
81
  isWsl: _iswsl.default,
82
82
  isCI: _ciinfo.isCI,
83
83
  ciName: _ciinfo.isCI && _ciinfo.name || null,
84
- nextVersion: "15.3.0-canary.6"
84
+ nextVersion: "15.3.0-canary.8"
85
85
  };
86
86
  return traits;
87
87
  }
@@ -11,11 +11,11 @@ Object.defineProperty(exports, "eventCliSessionStopped", {
11
11
  const EVENT_VERSION = 'NEXT_CLI_SESSION_STOPPED';
12
12
  function eventCliSessionStopped(event) {
13
13
  // This should be an invariant, if it fails our build tooling is broken.
14
- if (typeof "15.3.0-canary.6" !== 'string') {
14
+ if (typeof "15.3.0-canary.8" !== 'string') {
15
15
  return [];
16
16
  }
17
17
  const payload = {
18
- nextVersion: "15.3.0-canary.6",
18
+ nextVersion: "15.3.0-canary.8",
19
19
  nodeVersion: process.version,
20
20
  cliCommand: event.cliCommand,
21
21
  durationMilliseconds: event.durationMilliseconds,
@@ -36,12 +36,12 @@ function hasBabelConfig(dir) {
36
36
  function eventCliSession(dir, nextConfig, event) {
37
37
  var _nextConfig_experimental_staleTimes, _nextConfig_experimental_staleTimes1, _nextConfig_experimental_reactCompiler, _nextConfig_experimental_reactCompiler1;
38
38
  // This should be an invariant, if it fails our build tooling is broken.
39
- if (typeof "15.3.0-canary.6" !== 'string') {
39
+ if (typeof "15.3.0-canary.8" !== 'string') {
40
40
  return [];
41
41
  }
42
42
  const { images, i18n } = nextConfig || {};
43
43
  const payload = {
44
- nextVersion: "15.3.0-canary.6",
44
+ nextVersion: "15.3.0-canary.8",
45
45
  nodeVersion: process.version,
46
46
  cliCommand: event.cliCommand,
47
47
  isSrcDir: event.isSrcDir,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next",
3
- "version": "15.3.0-canary.6",
3
+ "version": "15.3.0-canary.8",
4
4
  "description": "The React Framework",
5
5
  "main": "./dist/server/next.js",
6
6
  "license": "MIT",
@@ -100,7 +100,7 @@
100
100
  ]
101
101
  },
102
102
  "dependencies": {
103
- "@next/env": "15.3.0-canary.6",
103
+ "@next/env": "15.3.0-canary.8",
104
104
  "@swc/counter": "0.1.3",
105
105
  "@swc/helpers": "0.5.15",
106
106
  "busboy": "1.6.0",
@@ -132,14 +132,14 @@
132
132
  },
133
133
  "optionalDependencies": {
134
134
  "sharp": "^0.33.5",
135
- "@next/swc-darwin-arm64": "15.3.0-canary.6",
136
- "@next/swc-darwin-x64": "15.3.0-canary.6",
137
- "@next/swc-linux-arm64-gnu": "15.3.0-canary.6",
138
- "@next/swc-linux-arm64-musl": "15.3.0-canary.6",
139
- "@next/swc-linux-x64-gnu": "15.3.0-canary.6",
140
- "@next/swc-linux-x64-musl": "15.3.0-canary.6",
141
- "@next/swc-win32-arm64-msvc": "15.3.0-canary.6",
142
- "@next/swc-win32-x64-msvc": "15.3.0-canary.6"
135
+ "@next/swc-darwin-arm64": "15.3.0-canary.8",
136
+ "@next/swc-darwin-x64": "15.3.0-canary.8",
137
+ "@next/swc-linux-arm64-gnu": "15.3.0-canary.8",
138
+ "@next/swc-linux-arm64-musl": "15.3.0-canary.8",
139
+ "@next/swc-linux-x64-gnu": "15.3.0-canary.8",
140
+ "@next/swc-linux-x64-musl": "15.3.0-canary.8",
141
+ "@next/swc-win32-arm64-msvc": "15.3.0-canary.8",
142
+ "@next/swc-win32-x64-msvc": "15.3.0-canary.8"
143
143
  },
144
144
  "devDependencies": {
145
145
  "@ampproject/toolbox-optimizer": "2.8.3",
@@ -172,11 +172,11 @@
172
172
  "@jest/types": "29.5.0",
173
173
  "@mswjs/interceptors": "0.23.0",
174
174
  "@napi-rs/triples": "1.2.0",
175
- "@next/font": "15.3.0-canary.6",
176
- "@next/polyfill-module": "15.3.0-canary.6",
177
- "@next/polyfill-nomodule": "15.3.0-canary.6",
178
- "@next/react-refresh-utils": "15.3.0-canary.6",
179
- "@next/swc": "15.3.0-canary.6",
175
+ "@next/font": "15.3.0-canary.8",
176
+ "@next/polyfill-module": "15.3.0-canary.8",
177
+ "@next/polyfill-nomodule": "15.3.0-canary.8",
178
+ "@next/react-refresh-utils": "15.3.0-canary.8",
179
+ "@next/swc": "15.3.0-canary.8",
180
180
  "@opentelemetry/api": "1.6.0",
181
181
  "@playwright/test": "1.41.2",
182
182
  "@storybook/addon-a11y": "8.6.0",