Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
1 line
No EOL
17 KiB
Text
1 line
No EOL
17 KiB
Text
{"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 // 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 info.languageService\n }\n\n init({\n ts,\n info,\n })\n\n // Set up decorator object\n const proxy: tsModule.LanguageService = Object.create(null)\n for (let k of Object.keys(info.languageService)) {\n const x = info.languageService[k as keyof tsModule.LanguageService]\n // @ts-expect-error - JS runtime trickery which is tricky to type tersely\n proxy[k] = (...args: Array<{}>) => x.apply(info.languageService, args)\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\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 fileName\n )\n if (entryCompletionEntryDetails) return entryCompletionEntryDetails\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\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.client.getSemanticDiagnosticsForExportVariableStatement(\n fileName,\n node\n )\n : metadata.server.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.client.getSemanticDiagnosticsForExportVariableStatement(\n fileName,\n node\n )\n : metadata.server.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.client.getSemanticDiagnosticsForExportDeclaration(\n fileName,\n node\n )\n : metadata.server.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 return proxy\n }\n\n return { create }\n}\n"],"names":["createTSPlugin","typescript","ts","create","info","isPluginEnabled","config","enabled","languageService","init","proxy","Object","k","keys","x","args","apply","getCompletionsAtPosition","fileName","position","options","prior","isGlobalCompletion","isMemberCompletion","isNewIdentifierLocation","entries","isAppEntryFile","entryInfo","getEntryInfo","client","serverLayer","filterCompletionsAtPosition","entryConfig","addCompletionsAtPosition","source","getSource","forEachChild","node","isPositionInsideNode","isDefaultFunctionExport","push","entryDefault","getCompletionEntryDetails","entryName","formatOptions","preferences","data","entryCompletionEntryDetails","getQuickInfoAtPosition","definitions","getDefinitionAtPosition","hasDisallowedReactAPIDefinition","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","metadata","clientBoundary","serverBoundary","getSemanticDiagnosticsForFunctionExport","isFunctionDeclaration","isExportDeclaration","getSemanticDiagnosticsForExportDeclaration"],"mappings":"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","ignoreList":[0]} |