@tanstack/start-plugin-core 1.166.12 → 1.166.14

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 (87) hide show
  1. package/dist/esm/build-sitemap.js +94 -123
  2. package/dist/esm/build-sitemap.js.map +1 -1
  3. package/dist/esm/constants.js +15 -20
  4. package/dist/esm/constants.js.map +1 -1
  5. package/dist/esm/dev-server-plugin/dev-styles.js +137 -150
  6. package/dist/esm/dev-server-plugin/dev-styles.js.map +1 -1
  7. package/dist/esm/dev-server-plugin/extract-html-scripts.js +16 -15
  8. package/dist/esm/dev-server-plugin/extract-html-scripts.js.map +1 -1
  9. package/dist/esm/dev-server-plugin/plugin.js +125 -195
  10. package/dist/esm/dev-server-plugin/plugin.js.map +1 -1
  11. package/dist/esm/import-protection-plugin/ast.js +6 -5
  12. package/dist/esm/import-protection-plugin/ast.js.map +1 -1
  13. package/dist/esm/import-protection-plugin/constants.js +20 -22
  14. package/dist/esm/import-protection-plugin/constants.js.map +1 -1
  15. package/dist/esm/import-protection-plugin/defaults.js +35 -25
  16. package/dist/esm/import-protection-plugin/defaults.js.map +1 -1
  17. package/dist/esm/import-protection-plugin/extensionlessAbsoluteIdResolver.js +93 -92
  18. package/dist/esm/import-protection-plugin/extensionlessAbsoluteIdResolver.js.map +1 -1
  19. package/dist/esm/import-protection-plugin/matchers.js +23 -24
  20. package/dist/esm/import-protection-plugin/matchers.js.map +1 -1
  21. package/dist/esm/import-protection-plugin/plugin.js +1045 -1361
  22. package/dist/esm/import-protection-plugin/plugin.js.map +1 -1
  23. package/dist/esm/import-protection-plugin/postCompileUsage.js +58 -55
  24. package/dist/esm/import-protection-plugin/postCompileUsage.js.map +1 -1
  25. package/dist/esm/import-protection-plugin/rewriteDeniedImports.js +187 -259
  26. package/dist/esm/import-protection-plugin/rewriteDeniedImports.js.map +1 -1
  27. package/dist/esm/import-protection-plugin/sourceLocation.js +238 -248
  28. package/dist/esm/import-protection-plugin/sourceLocation.js.map +1 -1
  29. package/dist/esm/import-protection-plugin/trace.js +173 -184
  30. package/dist/esm/import-protection-plugin/trace.js.map +1 -1
  31. package/dist/esm/import-protection-plugin/utils.js +132 -111
  32. package/dist/esm/import-protection-plugin/utils.js.map +1 -1
  33. package/dist/esm/import-protection-plugin/virtualModules.js +216 -196
  34. package/dist/esm/import-protection-plugin/virtualModules.js.map +1 -1
  35. package/dist/esm/index.js +2 -7
  36. package/dist/esm/load-env-plugin/plugin.js +12 -11
  37. package/dist/esm/load-env-plugin/plugin.js.map +1 -1
  38. package/dist/esm/output-directory.js +10 -10
  39. package/dist/esm/output-directory.js.map +1 -1
  40. package/dist/esm/plugin.js +275 -355
  41. package/dist/esm/plugin.js.map +1 -1
  42. package/dist/esm/post-server-build.js +39 -53
  43. package/dist/esm/post-server-build.js.map +1 -1
  44. package/dist/esm/prerender.js +177 -239
  45. package/dist/esm/prerender.js.map +1 -1
  46. package/dist/esm/preview-server-plugin/plugin.js +41 -44
  47. package/dist/esm/preview-server-plugin/plugin.js.map +1 -1
  48. package/dist/esm/queue.js +115 -126
  49. package/dist/esm/queue.js.map +1 -1
  50. package/dist/esm/resolve-entries.js +31 -32
  51. package/dist/esm/resolve-entries.js.map +1 -1
  52. package/dist/esm/schema.js +156 -179
  53. package/dist/esm/schema.js.map +1 -1
  54. package/dist/esm/start-compiler-plugin/compiler.js +655 -812
  55. package/dist/esm/start-compiler-plugin/compiler.js.map +1 -1
  56. package/dist/esm/start-compiler-plugin/handleClientOnlyJSX.js +25 -8
  57. package/dist/esm/start-compiler-plugin/handleClientOnlyJSX.js.map +1 -1
  58. package/dist/esm/start-compiler-plugin/handleCreateIsomorphicFn.js +22 -19
  59. package/dist/esm/start-compiler-plugin/handleCreateIsomorphicFn.js.map +1 -1
  60. package/dist/esm/start-compiler-plugin/handleCreateMiddleware.js +20 -22
  61. package/dist/esm/start-compiler-plugin/handleCreateMiddleware.js.map +1 -1
  62. package/dist/esm/start-compiler-plugin/handleCreateServerFn.js +187 -255
  63. package/dist/esm/start-compiler-plugin/handleCreateServerFn.js.map +1 -1
  64. package/dist/esm/start-compiler-plugin/handleEnvOnly.js +23 -33
  65. package/dist/esm/start-compiler-plugin/handleEnvOnly.js.map +1 -1
  66. package/dist/esm/start-compiler-plugin/plugin.js +247 -291
  67. package/dist/esm/start-compiler-plugin/plugin.js.map +1 -1
  68. package/dist/esm/start-compiler-plugin/utils.js +27 -27
  69. package/dist/esm/start-compiler-plugin/utils.js.map +1 -1
  70. package/dist/esm/start-manifest-plugin/manifestBuilder.js +272 -378
  71. package/dist/esm/start-manifest-plugin/manifestBuilder.js.map +1 -1
  72. package/dist/esm/start-manifest-plugin/plugin.js +35 -44
  73. package/dist/esm/start-manifest-plugin/plugin.js.map +1 -1
  74. package/dist/esm/start-router-plugin/constants.js +6 -5
  75. package/dist/esm/start-router-plugin/constants.js.map +1 -1
  76. package/dist/esm/start-router-plugin/generator-plugins/prerender-routes-plugin.js +24 -19
  77. package/dist/esm/start-router-plugin/generator-plugins/prerender-routes-plugin.js.map +1 -1
  78. package/dist/esm/start-router-plugin/generator-plugins/routes-manifest-plugin.js +28 -29
  79. package/dist/esm/start-router-plugin/generator-plugins/routes-manifest-plugin.js.map +1 -1
  80. package/dist/esm/start-router-plugin/plugin.js +146 -199
  81. package/dist/esm/start-router-plugin/plugin.js.map +1 -1
  82. package/dist/esm/start-router-plugin/pruneServerOnlySubtrees.js +32 -31
  83. package/dist/esm/start-router-plugin/pruneServerOnlySubtrees.js.map +1 -1
  84. package/dist/esm/utils.js +14 -14
  85. package/dist/esm/utils.js.map +1 -1
  86. package/package.json +7 -7
  87. package/dist/esm/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../src/plugin.ts"],"sourcesContent":["import { joinPaths } from '@tanstack/router-core'\nimport * as vite from 'vite'\nimport { crawlFrameworkPkgs } from 'vitefu'\nimport { join } from 'pathe'\nimport { escapePath } from 'tinyglobby'\nimport { startManifestPlugin } from './start-manifest-plugin/plugin'\nimport { ENTRY_POINTS, VITE_ENVIRONMENT_NAMES } from './constants'\nimport { tanStackStartRouter } from './start-router-plugin/plugin'\nimport { loadEnvPlugin } from './load-env-plugin/plugin'\nimport { devServerPlugin } from './dev-server-plugin/plugin'\nimport { previewServerPlugin } from './preview-server-plugin/plugin'\nimport { parseStartConfig } from './schema'\nimport { resolveEntry } from './resolve-entries'\nimport {\n getClientOutputDirectory,\n getServerOutputDirectory,\n} from './output-directory'\nimport { postServerBuild } from './post-server-build'\nimport { startCompilerPlugin } from './start-compiler-plugin/plugin'\nimport { importProtectionPlugin } from './import-protection-plugin/plugin'\nimport type {\n GetConfigFn,\n ResolvedStartConfig,\n TanStackStartVitePluginCoreOptions,\n} from './types'\nimport type { ViteEnvironmentNames } from './constants'\nimport type {\n TanStackStartInputConfig,\n TanStackStartOutputConfig,\n} from './schema'\nimport type { PluginOption } from 'vite'\n\nfunction isFullUrl(str: string): boolean {\n try {\n new URL(str)\n return true\n } catch {\n return false\n }\n}\n\nexport function TanStackStartVitePluginCore(\n corePluginOpts: TanStackStartVitePluginCoreOptions,\n startPluginOpts: TanStackStartInputConfig,\n): Array<PluginOption> {\n // Determine the provider environment for server functions\n // If providerEnv is set, use that; otherwise default to SSR as the provider\n const serverFnProviderEnv =\n corePluginOpts.serverFn?.providerEnv || VITE_ENVIRONMENT_NAMES.server\n const ssrIsProvider = serverFnProviderEnv === VITE_ENVIRONMENT_NAMES.server\n\n const resolvedStartConfig: ResolvedStartConfig = {\n root: '',\n startFilePath: undefined,\n routerFilePath: '',\n srcDirectory: '',\n viteAppBase: '',\n serverFnProviderEnv,\n }\n\n let startConfig: TanStackStartOutputConfig | null\n const getConfig: GetConfigFn = () => {\n if (!resolvedStartConfig.root) {\n throw new Error(`Cannot get config before root is resolved`)\n }\n if (!startConfig) {\n startConfig = parseStartConfig(\n startPluginOpts,\n corePluginOpts,\n resolvedStartConfig.root,\n )\n }\n return { startConfig, resolvedStartConfig, corePluginOpts }\n }\n\n // When the router basepath and vite base are misaligned during dev,\n // we install a URL rewrite middleware instead of erroring.\n let needsDevBaseRewrite = false\n\n const capturedBundle: Partial<\n Record<ViteEnvironmentNames, vite.Rollup.OutputBundle>\n > = {}\n\n function getBundle(envName: ViteEnvironmentNames): vite.Rollup.OutputBundle {\n const bundle = capturedBundle[envName]\n if (!bundle) {\n throw new Error(`No bundle captured for environment: ${envName}`)\n }\n return bundle\n }\n\n const environments: Array<{ name: string; type: 'client' | 'server' }> = [\n { name: VITE_ENVIRONMENT_NAMES.client, type: 'client' },\n { name: VITE_ENVIRONMENT_NAMES.server, type: 'server' },\n ]\n if (\n corePluginOpts.serverFn?.providerEnv &&\n !environments.find((e) => e.name === corePluginOpts.serverFn?.providerEnv)\n ) {\n environments.push({\n name: corePluginOpts.serverFn.providerEnv,\n type: 'server',\n })\n }\n return [\n {\n name: 'tanstack-start-core:config',\n enforce: 'pre',\n async config(viteConfig, { command }) {\n resolvedStartConfig.viteAppBase = viteConfig.base ?? '/'\n if (!isFullUrl(resolvedStartConfig.viteAppBase)) {\n resolvedStartConfig.viteAppBase = joinPaths([\n '/',\n viteConfig.base,\n '/',\n ])\n }\n const root = viteConfig.root || process.cwd()\n resolvedStartConfig.root = root\n\n const { startConfig } = getConfig()\n if (startConfig.router.basepath === undefined) {\n if (!isFullUrl(resolvedStartConfig.viteAppBase)) {\n startConfig.router.basepath =\n resolvedStartConfig.viteAppBase.replace(/^\\/|\\/$/g, '')\n } else {\n startConfig.router.basepath = '/'\n }\n } else {\n if (command === 'serve' && !viteConfig.server?.middlewareMode) {\n // when serving, we must ensure that router basepath and viteAppBase are aligned\n if (\n !joinPaths(['/', startConfig.router.basepath, '/']).startsWith(\n joinPaths(['/', resolvedStartConfig.viteAppBase, '/']),\n )\n ) {\n // The router basepath and vite base are misaligned.\n // Instead of erroring, we install a dev-server middleware that\n // rewrites incoming request URLs to prepend the vite base prefix.\n // This allows users to have e.g. base: '/_ui/' for asset URLs\n // while keeping router basepath at '/' for page navigation.\n needsDevBaseRewrite = true\n }\n }\n }\n\n const TSS_SERVER_FN_BASE = joinPaths([\n '/',\n startConfig.router.basepath,\n startConfig.serverFns.base,\n '/',\n ])\n const resolvedSrcDirectory = join(root, startConfig.srcDirectory)\n resolvedStartConfig.srcDirectory = resolvedSrcDirectory\n\n const startFilePath = resolveEntry({\n type: 'start entry',\n configuredEntry: startConfig.start.entry,\n defaultEntry: 'start',\n resolvedSrcDirectory,\n required: false,\n })\n resolvedStartConfig.startFilePath = startFilePath\n\n const routerFilePath = resolveEntry({\n type: 'router entry',\n configuredEntry: startConfig.router.entry,\n defaultEntry: 'router',\n resolvedSrcDirectory,\n required: true,\n })\n resolvedStartConfig.routerFilePath = routerFilePath\n\n const clientEntryPath = resolveEntry({\n type: 'client entry',\n configuredEntry: startConfig.client.entry,\n defaultEntry: 'client',\n resolvedSrcDirectory,\n required: false,\n })\n\n const serverEntryPath = resolveEntry({\n type: 'server entry',\n configuredEntry: startConfig.server.entry,\n defaultEntry: 'server',\n resolvedSrcDirectory,\n required: false,\n })\n\n const clientAlias = vite.normalizePath(\n clientEntryPath ?? corePluginOpts.defaultEntryPaths.client,\n )\n const serverAlias = vite.normalizePath(\n serverEntryPath ?? corePluginOpts.defaultEntryPaths.server,\n )\n const startAlias = vite.normalizePath(\n startFilePath ?? corePluginOpts.defaultEntryPaths.start,\n )\n const routerAlias = vite.normalizePath(routerFilePath)\n\n const entryAliasConfiguration: Record<\n (typeof ENTRY_POINTS)[keyof typeof ENTRY_POINTS],\n string\n > = {\n [ENTRY_POINTS.client]: clientAlias,\n [ENTRY_POINTS.server]: serverAlias,\n [ENTRY_POINTS.start]: startAlias,\n [ENTRY_POINTS.router]: routerAlias,\n }\n\n const startPackageName =\n `@tanstack/${corePluginOpts.framework}-start` as const\n\n // crawl packages that have start in \"peerDependencies\"\n // see https://github.com/svitejs/vitefu/blob/d8d82fa121e3b2215ba437107093c77bde51b63b/src/index.js#L95-L101\n\n // this is currently uncached; could be implemented similarly as vite handles lock file changes\n // see https://github.com/vitejs/vite/blob/557f797d29422027e8c451ca50dd84bf8c41b5f0/packages/vite/src/node/optimizer/index.ts#L1282\n\n const crawlFrameworkPkgsResult = await crawlFrameworkPkgs({\n root: process.cwd(),\n isBuild: command === 'build',\n isFrameworkPkgByJson(pkgJson) {\n const peerDependencies = pkgJson['peerDependencies']\n\n if (peerDependencies) {\n if (\n startPackageName in peerDependencies ||\n '@tanstack/start-client-core' in peerDependencies\n ) {\n return true\n }\n }\n\n return false\n },\n })\n\n return {\n // see https://vite.dev/config/shared-options.html#apptype\n // this will prevent vite from injecting middlewares that we don't want\n appType: viteConfig.appType ?? 'custom',\n environments: {\n [VITE_ENVIRONMENT_NAMES.client]: {\n consumer: 'client',\n build: {\n rollupOptions: {\n input: {\n main: ENTRY_POINTS.client,\n },\n },\n outDir: getClientOutputDirectory(viteConfig),\n },\n optimizeDeps: {\n exclude: crawlFrameworkPkgsResult.optimizeDeps.exclude,\n // Ensure user code can be crawled for dependencies\n entries: [clientAlias, routerAlias].map((entry) =>\n // Entries are treated as `tinyglobby` patterns so need to be escaped\n escapePath(entry),\n ),\n },\n },\n [VITE_ENVIRONMENT_NAMES.server]: {\n consumer: 'server',\n build: {\n ssr: true,\n rollupOptions: {\n input:\n viteConfig.environments?.[VITE_ENVIRONMENT_NAMES.server]\n ?.build?.rollupOptions?.input ?? serverAlias,\n },\n outDir: getServerOutputDirectory(viteConfig),\n commonjsOptions: {\n include: [/node_modules/],\n },\n copyPublicDir:\n viteConfig.environments?.[VITE_ENVIRONMENT_NAMES.server]\n ?.build?.copyPublicDir ?? false,\n },\n optimizeDeps: {\n // Ensure user code can be crawled for dependencies\n entries: [serverAlias, startAlias, routerAlias].map((entry) =>\n // Entries are treated as `tinyglobby` patterns so need to be escaped\n escapePath(entry),\n ),\n },\n },\n },\n\n resolve: {\n noExternal: [\n // ENTRY_POINTS.start,\n '@tanstack/start**',\n `@tanstack/${corePluginOpts.framework}-start**`,\n ...crawlFrameworkPkgsResult.ssr.noExternal.sort(),\n ],\n alias: {\n ...entryAliasConfiguration,\n },\n },\n /* prettier-ignore */\n define: {\n // define is an esbuild function that replaces the any instances of given keys with the given values\n // i.e: __FRAMEWORK_NAME__ can be replaced with JSON.stringify(\"TanStack Start\")\n // This is not the same as injecting environment variables.\n\n ...defineReplaceEnv('TSS_SERVER_FN_BASE', TSS_SERVER_FN_BASE),\n ...defineReplaceEnv('TSS_CLIENT_OUTPUT_DIR', getClientOutputDirectory(viteConfig)),\n ...defineReplaceEnv('TSS_ROUTER_BASEPATH', startConfig.router.basepath),\n ...(command === 'serve' ? defineReplaceEnv('TSS_SHELL', startConfig.spa?.enabled ? 'true' : 'false') : {}),\n ...defineReplaceEnv('TSS_DEV_SERVER', command === 'serve' ? 'true' : 'false'),\n // Dev SSR styles: enabled flag and basepath (defaults to vite base for asset URL alignment)\n ...defineReplaceEnv('TSS_DEV_SSR_STYLES_ENABLED', startConfig.dev.ssrStyles.enabled ? 'true' : 'false'),\n ...defineReplaceEnv('TSS_DEV_SSR_STYLES_BASEPATH', startConfig.dev.ssrStyles.basepath ?? resolvedStartConfig.viteAppBase),\n // Replace NODE_ENV during build (unless opted out) for dead code elimination in server bundles\n ...(command === 'build' && startConfig.server.build.staticNodeEnv ? {\n 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || viteConfig.mode || 'production'),\n } : {}),\n },\n builder: {\n sharedPlugins: true,\n async buildApp(builder) {\n const client = builder.environments[VITE_ENVIRONMENT_NAMES.client]\n const server = builder.environments[VITE_ENVIRONMENT_NAMES.server]\n\n if (!client) {\n throw new Error('Client environment not found')\n }\n\n if (!server) {\n throw new Error('SSR environment not found')\n }\n\n if (!client.isBuilt) {\n // Build the client bundle first\n await builder.build(client)\n }\n if (!server.isBuilt) {\n // Build the SSR bundle\n await builder.build(server)\n }\n\n // If a custom provider environment is configured (not SSR),\n // build it last so the manifest includes functions from all environments\n if (!ssrIsProvider) {\n const providerEnv = builder.environments[serverFnProviderEnv]\n if (!providerEnv) {\n throw new Error(\n `Provider environment \"${serverFnProviderEnv}\" not found`,\n )\n }\n if (!providerEnv.isBuilt) {\n // Build the provider environment last\n // This ensures all server functions are discovered from client/ssr builds\n await builder.build(providerEnv)\n }\n }\n },\n },\n }\n },\n },\n // Separate plugin for buildApp hook with enforce: 'post'\n // This ensures proper ordering with other plugins that also have\n // buildApp hooks with order: 'post'. The enforce: 'post' ensures this\n // runs after other plugins (like Nitro) complete their builds.\n {\n name: 'tanstack-start-core:post-build',\n enforce: 'post',\n buildApp: {\n order: 'post',\n async handler(builder) {\n const { startConfig } = getConfig()\n await postServerBuild({ builder, startConfig })\n },\n },\n },\n // Server function plugin handles:\n // 1. Identifying createServerFn().handler() calls\n // 2. Extracting server functions to separate modules\n // 3. Replacing call sites with RPC stubs\n // 4. Generating the server function manifest\n // Also handles createIsomorphicFn, createServerOnlyFn, createClientOnlyFn, createMiddleware\n startCompilerPlugin({\n framework: corePluginOpts.framework,\n environments,\n generateFunctionId: startPluginOpts?.serverFns?.generateFunctionId,\n providerEnvName: serverFnProviderEnv,\n }),\n importProtectionPlugin({\n getConfig,\n framework: corePluginOpts.framework,\n environments,\n providerEnvName: serverFnProviderEnv,\n }),\n tanStackStartRouter(startPluginOpts, getConfig, corePluginOpts),\n loadEnvPlugin(),\n startManifestPlugin({\n getClientBundle: () => getBundle(VITE_ENVIRONMENT_NAMES.client),\n getConfig,\n }),\n // When the vite base and router basepath are misaligned (e.g. base: '/_ui/', basepath: '/'),\n // install a middleware that rewrites incoming request URLs to prepend the vite base prefix.\n // This allows Vite's internal base middleware to accept the requests, then strips the prefix\n // before passing to the SSR handler.\n // Registered BEFORE devServerPlugin so this middleware is added to the Connect stack first,\n // ensuring all subsequent middlewares (CSS, SSR, etc.) see the rewritten URL.\n {\n name: 'tanstack-start-core:dev-base-rewrite',\n configureServer(server) {\n if (!needsDevBaseRewrite) {\n return\n }\n const basePrefix = resolvedStartConfig.viteAppBase.replace(/\\/$/, '')\n server.middlewares.use((req, _res, next) => {\n if (req.url && !req.url.startsWith(basePrefix)) {\n req.url = basePrefix + req.url\n }\n next()\n })\n },\n },\n devServerPlugin({\n getConfig,\n devSsrStylesEnabled: startPluginOpts?.dev?.ssrStyles?.enabled ?? true,\n }),\n previewServerPlugin(),\n {\n name: 'tanstack-start:core:capture-bundle',\n applyToEnvironment(e) {\n return (\n e.name === VITE_ENVIRONMENT_NAMES.client ||\n e.name === VITE_ENVIRONMENT_NAMES.server\n )\n },\n enforce: 'post',\n generateBundle(_options, bundle) {\n const environment = this.environment.name as ViteEnvironmentNames\n if (!Object.values(VITE_ENVIRONMENT_NAMES).includes(environment)) {\n throw new Error(`Unknown environment: ${environment}`)\n }\n capturedBundle[environment] = bundle\n },\n },\n ]\n}\n\nfunction defineReplaceEnv<TKey extends string, TValue extends string>(\n key: TKey,\n value: TValue,\n): { [P in `process.env.${TKey}` | `import.meta.env.${TKey}`]: TValue } {\n return {\n [`process.env.${key}`]: JSON.stringify(value),\n [`import.meta.env.${key}`]: JSON.stringify(value),\n } as { [P in `process.env.${TKey}` | `import.meta.env.${TKey}`]: TValue }\n}\n"],"names":["startConfig"],"mappings":";;;;;;;;;;;;;;;;;AAgCA,SAAS,UAAU,KAAsB;AACvC,MAAI;AACF,QAAI,IAAI,GAAG;AACX,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,4BACd,gBACA,iBACqB;AAGrB,QAAM,sBACJ,eAAe,UAAU,eAAe,uBAAuB;AACjE,QAAM,gBAAgB,wBAAwB,uBAAuB;AAErE,QAAM,sBAA2C;AAAA,IAC/C,MAAM;AAAA,IACN,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,aAAa;AAAA,IACb;AAAA,EAAA;AAGF,MAAI;AACJ,QAAM,YAAyB,MAAM;AACnC,QAAI,CAAC,oBAAoB,MAAM;AAC7B,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC7D;AACA,QAAI,CAAC,aAAa;AAChB,oBAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA,oBAAoB;AAAA,MAAA;AAAA,IAExB;AACA,WAAO,EAAE,aAAa,qBAAqB,eAAA;AAAA,EAC7C;AAIA,MAAI,sBAAsB;AAE1B,QAAM,iBAEF,CAAA;AAEJ,WAAS,UAAU,SAAyD;AAC1E,UAAM,SAAS,eAAe,OAAO;AACrC,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,uCAAuC,OAAO,EAAE;AAAA,IAClE;AACA,WAAO;AAAA,EACT;AAEA,QAAM,eAAmE;AAAA,IACvE,EAAE,MAAM,uBAAuB,QAAQ,MAAM,SAAA;AAAA,IAC7C,EAAE,MAAM,uBAAuB,QAAQ,MAAM,SAAA;AAAA,EAAS;AAExD,MACE,eAAe,UAAU,eACzB,CAAC,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,eAAe,UAAU,WAAW,GACzE;AACA,iBAAa,KAAK;AAAA,MAChB,MAAM,eAAe,SAAS;AAAA,MAC9B,MAAM;AAAA,IAAA,CACP;AAAA,EACH;AACA,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,OAAO,YAAY,EAAE,WAAW;AACpC,4BAAoB,cAAc,WAAW,QAAQ;AACrD,YAAI,CAAC,UAAU,oBAAoB,WAAW,GAAG;AAC/C,8BAAoB,cAAc,UAAU;AAAA,YAC1C;AAAA,YACA,WAAW;AAAA,YACX;AAAA,UAAA,CACD;AAAA,QACH;AACA,cAAM,OAAO,WAAW,QAAQ,QAAQ,IAAA;AACxC,4BAAoB,OAAO;AAE3B,cAAM,EAAE,aAAAA,aAAAA,IAAgB,UAAA;AACxB,YAAIA,aAAY,OAAO,aAAa,QAAW;AAC7C,cAAI,CAAC,UAAU,oBAAoB,WAAW,GAAG;AAC/CA,yBAAY,OAAO,WACjB,oBAAoB,YAAY,QAAQ,YAAY,EAAE;AAAA,UAC1D,OAAO;AACLA,yBAAY,OAAO,WAAW;AAAA,UAChC;AAAA,QACF,OAAO;AACL,cAAI,YAAY,WAAW,CAAC,WAAW,QAAQ,gBAAgB;AAE7D,gBACE,CAAC,UAAU,CAAC,KAAKA,aAAY,OAAO,UAAU,GAAG,CAAC,EAAE;AAAA,cAClD,UAAU,CAAC,KAAK,oBAAoB,aAAa,GAAG,CAAC;AAAA,YAAA,GAEvD;AAMA,oCAAsB;AAAA,YACxB;AAAA,UACF;AAAA,QACF;AAEA,cAAM,qBAAqB,UAAU;AAAA,UACnC;AAAA,UACAA,aAAY,OAAO;AAAA,UACnBA,aAAY,UAAU;AAAA,UACtB;AAAA,QAAA,CACD;AACD,cAAM,uBAAuB,KAAK,MAAMA,aAAY,YAAY;AAChE,4BAAoB,eAAe;AAEnC,cAAM,gBAAgB,aAAa;AAAA,UACjC,MAAM;AAAA,UACN,iBAAiBA,aAAY,MAAM;AAAA,UACnC,cAAc;AAAA,UACd;AAAA,UACA,UAAU;AAAA,QAAA,CACX;AACD,4BAAoB,gBAAgB;AAEpC,cAAM,iBAAiB,aAAa;AAAA,UAClC,MAAM;AAAA,UACN,iBAAiBA,aAAY,OAAO;AAAA,UACpC,cAAc;AAAA,UACd;AAAA,UACA,UAAU;AAAA,QAAA,CACX;AACD,4BAAoB,iBAAiB;AAErC,cAAM,kBAAkB,aAAa;AAAA,UACnC,MAAM;AAAA,UACN,iBAAiBA,aAAY,OAAO;AAAA,UACpC,cAAc;AAAA,UACd;AAAA,UACA,UAAU;AAAA,QAAA,CACX;AAED,cAAM,kBAAkB,aAAa;AAAA,UACnC,MAAM;AAAA,UACN,iBAAiBA,aAAY,OAAO;AAAA,UACpC,cAAc;AAAA,UACd;AAAA,UACA,UAAU;AAAA,QAAA,CACX;AAED,cAAM,cAAc,KAAK;AAAA,UACvB,mBAAmB,eAAe,kBAAkB;AAAA,QAAA;AAEtD,cAAM,cAAc,KAAK;AAAA,UACvB,mBAAmB,eAAe,kBAAkB;AAAA,QAAA;AAEtD,cAAM,aAAa,KAAK;AAAA,UACtB,iBAAiB,eAAe,kBAAkB;AAAA,QAAA;AAEpD,cAAM,cAAc,KAAK,cAAc,cAAc;AAErD,cAAM,0BAGF;AAAA,UACF,CAAC,aAAa,MAAM,GAAG;AAAA,UACvB,CAAC,aAAa,MAAM,GAAG;AAAA,UACvB,CAAC,aAAa,KAAK,GAAG;AAAA,UACtB,CAAC,aAAa,MAAM,GAAG;AAAA,QAAA;AAGzB,cAAM,mBACJ,aAAa,eAAe,SAAS;AAQvC,cAAM,2BAA2B,MAAM,mBAAmB;AAAA,UACxD,MAAM,QAAQ,IAAA;AAAA,UACd,SAAS,YAAY;AAAA,UACrB,qBAAqB,SAAS;AAC5B,kBAAM,mBAAmB,QAAQ,kBAAkB;AAEnD,gBAAI,kBAAkB;AACpB,kBACE,oBAAoB,oBACpB,iCAAiC,kBACjC;AACA,uBAAO;AAAA,cACT;AAAA,YACF;AAEA,mBAAO;AAAA,UACT;AAAA,QAAA,CACD;AAED,eAAO;AAAA;AAAA;AAAA,UAGL,SAAS,WAAW,WAAW;AAAA,UAC/B,cAAc;AAAA,YACZ,CAAC,uBAAuB,MAAM,GAAG;AAAA,cAC/B,UAAU;AAAA,cACV,OAAO;AAAA,gBACL,eAAe;AAAA,kBACb,OAAO;AAAA,oBACL,MAAM,aAAa;AAAA,kBAAA;AAAA,gBACrB;AAAA,gBAEF,QAAQ,yBAAyB,UAAU;AAAA,cAAA;AAAA,cAE7C,cAAc;AAAA,gBACZ,SAAS,yBAAyB,aAAa;AAAA;AAAA,gBAE/C,SAAS,CAAC,aAAa,WAAW,EAAE;AAAA,kBAAI,CAAC;AAAA;AAAA,oBAEvC,WAAW,KAAK;AAAA;AAAA,gBAAA;AAAA,cAClB;AAAA,YACF;AAAA,YAEF,CAAC,uBAAuB,MAAM,GAAG;AAAA,cAC/B,UAAU;AAAA,cACV,OAAO;AAAA,gBACL,KAAK;AAAA,gBACL,eAAe;AAAA,kBACb,OACE,WAAW,eAAe,uBAAuB,MAAM,GACnD,OAAO,eAAe,SAAS;AAAA,gBAAA;AAAA,gBAEvC,QAAQ,yBAAyB,UAAU;AAAA,gBAC3C,iBAAiB;AAAA,kBACf,SAAS,CAAC,cAAc;AAAA,gBAAA;AAAA,gBAE1B,eACE,WAAW,eAAe,uBAAuB,MAAM,GACnD,OAAO,iBAAiB;AAAA,cAAA;AAAA,cAEhC,cAAc;AAAA;AAAA,gBAEZ,SAAS,CAAC,aAAa,YAAY,WAAW,EAAE;AAAA,kBAAI,CAAC;AAAA;AAAA,oBAEnD,WAAW,KAAK;AAAA;AAAA,gBAAA;AAAA,cAClB;AAAA,YACF;AAAA,UACF;AAAA,UAGF,SAAS;AAAA,YACP,YAAY;AAAA;AAAA,cAEV;AAAA,cACA,aAAa,eAAe,SAAS;AAAA,cACrC,GAAG,yBAAyB,IAAI,WAAW,KAAA;AAAA,YAAK;AAAA,YAElD,OAAO;AAAA,cACL,GAAG;AAAA,YAAA;AAAA,UACL;AAAA;AAAA,UAGF,QAAQ;AAAA;AAAA;AAAA;AAAA,YAKN,GAAG,iBAAiB,sBAAsB,kBAAkB;AAAA,YAC5D,GAAG,iBAAiB,yBAAyB,yBAAyB,UAAU,CAAC;AAAA,YACjF,GAAG,iBAAiB,uBAAuBA,aAAY,OAAO,QAAQ;AAAA,YACtE,GAAI,YAAY,UAAU,iBAAiB,aAAaA,aAAY,KAAK,UAAU,SAAS,OAAO,IAAI,CAAA;AAAA,YACvG,GAAG,iBAAiB,kBAAkB,YAAY,UAAU,SAAS,OAAO;AAAA;AAAA,YAE5E,GAAG,iBAAiB,8BAA8BA,aAAY,IAAI,UAAU,UAAU,SAAS,OAAO;AAAA,YACtG,GAAG,iBAAiB,+BAA+BA,aAAY,IAAI,UAAU,YAAY,oBAAoB,WAAW;AAAA;AAAA,YAExH,GAAI,YAAY,WAAWA,aAAY,OAAO,MAAM,gBAAgB;AAAA,cAClE,wBAAwB,KAAK,UAAU,QAAQ,IAAI,YAAY,WAAW,QAAQ,YAAY;AAAA,YAAA,IAC5F,CAAA;AAAA,UAAC;AAAA,UAEP,SAAS;AAAA,YACP,eAAe;AAAA,YACf,MAAM,SAAS,SAAS;AACtB,oBAAM,SAAS,QAAQ,aAAa,uBAAuB,MAAM;AACjE,oBAAM,SAAS,QAAQ,aAAa,uBAAuB,MAAM;AAEjE,kBAAI,CAAC,QAAQ;AACX,sBAAM,IAAI,MAAM,8BAA8B;AAAA,cAChD;AAEA,kBAAI,CAAC,QAAQ;AACX,sBAAM,IAAI,MAAM,2BAA2B;AAAA,cAC7C;AAEA,kBAAI,CAAC,OAAO,SAAS;AAEnB,sBAAM,QAAQ,MAAM,MAAM;AAAA,cAC5B;AACA,kBAAI,CAAC,OAAO,SAAS;AAEnB,sBAAM,QAAQ,MAAM,MAAM;AAAA,cAC5B;AAIA,kBAAI,CAAC,eAAe;AAClB,sBAAM,cAAc,QAAQ,aAAa,mBAAmB;AAC5D,oBAAI,CAAC,aAAa;AAChB,wBAAM,IAAI;AAAA,oBACR,yBAAyB,mBAAmB;AAAA,kBAAA;AAAA,gBAEhD;AACA,oBAAI,CAAC,YAAY,SAAS;AAGxB,wBAAM,QAAQ,MAAM,WAAW;AAAA,gBACjC;AAAA,cACF;AAAA,YACF;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMF;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,QACR,OAAO;AAAA,QACP,MAAM,QAAQ,SAAS;AACrB,gBAAM,EAAE,aAAAA,aAAAA,IAAgB,UAAA;AACxB,gBAAM,gBAAgB,EAAE,SAAS,aAAAA,cAAa;AAAA,QAChD;AAAA,MAAA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQF,oBAAoB;AAAA,MAClB,WAAW,eAAe;AAAA,MAC1B;AAAA,MACA,oBAAoB,iBAAiB,WAAW;AAAA,MAChD,iBAAiB;AAAA,IAAA,CAClB;AAAA,IACD,uBAAuB;AAAA,MACrB;AAAA,MACA,WAAW,eAAe;AAAA,MAC1B;AAAA,MACA,iBAAiB;AAAA,IAAA,CAClB;AAAA,IACD,oBAAoB,iBAAiB,WAAW,cAAc;AAAA,IAC9D,cAAA;AAAA,IACA,oBAAoB;AAAA,MAClB,iBAAiB,MAAM,UAAU,uBAAuB,MAAM;AAAA,MAC9D;AAAA,IAAA,CACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD;AAAA,MACE,MAAM;AAAA,MACN,gBAAgB,QAAQ;AACtB,YAAI,CAAC,qBAAqB;AACxB;AAAA,QACF;AACA,cAAM,aAAa,oBAAoB,YAAY,QAAQ,OAAO,EAAE;AACpE,eAAO,YAAY,IAAI,CAAC,KAAK,MAAM,SAAS;AAC1C,cAAI,IAAI,OAAO,CAAC,IAAI,IAAI,WAAW,UAAU,GAAG;AAC9C,gBAAI,MAAM,aAAa,IAAI;AAAA,UAC7B;AACA,eAAA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IAAA;AAAA,IAEF,gBAAgB;AAAA,MACd;AAAA,MACA,qBAAqB,iBAAiB,KAAK,WAAW,WAAW;AAAA,IAAA,CAClE;AAAA,IACD,oBAAA;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB,GAAG;AACpB,eACE,EAAE,SAAS,uBAAuB,UAClC,EAAE,SAAS,uBAAuB;AAAA,MAEtC;AAAA,MACA,SAAS;AAAA,MACT,eAAe,UAAU,QAAQ;AAC/B,cAAM,cAAc,KAAK,YAAY;AACrC,YAAI,CAAC,OAAO,OAAO,sBAAsB,EAAE,SAAS,WAAW,GAAG;AAChE,gBAAM,IAAI,MAAM,wBAAwB,WAAW,EAAE;AAAA,QACvD;AACA,uBAAe,WAAW,IAAI;AAAA,MAChC;AAAA,IAAA;AAAA,EACF;AAEJ;AAEA,SAAS,iBACP,KACA,OACsE;AACtE,SAAO;AAAA,IACL,CAAC,eAAe,GAAG,EAAE,GAAG,KAAK,UAAU,KAAK;AAAA,IAC5C,CAAC,mBAAmB,GAAG,EAAE,GAAG,KAAK,UAAU,KAAK;AAAA,EAAA;AAEpD;"}
1
+ {"version":3,"file":"plugin.js","names":[],"sources":["../../src/plugin.ts"],"sourcesContent":["import { joinPaths } from '@tanstack/router-core'\nimport * as vite from 'vite'\nimport { crawlFrameworkPkgs } from 'vitefu'\nimport { join } from 'pathe'\nimport { escapePath } from 'tinyglobby'\nimport { startManifestPlugin } from './start-manifest-plugin/plugin'\nimport { ENTRY_POINTS, VITE_ENVIRONMENT_NAMES } from './constants'\nimport { tanStackStartRouter } from './start-router-plugin/plugin'\nimport { loadEnvPlugin } from './load-env-plugin/plugin'\nimport { devServerPlugin } from './dev-server-plugin/plugin'\nimport { previewServerPlugin } from './preview-server-plugin/plugin'\nimport { parseStartConfig } from './schema'\nimport { resolveEntry } from './resolve-entries'\nimport {\n getClientOutputDirectory,\n getServerOutputDirectory,\n} from './output-directory'\nimport { postServerBuild } from './post-server-build'\nimport { startCompilerPlugin } from './start-compiler-plugin/plugin'\nimport { importProtectionPlugin } from './import-protection-plugin/plugin'\nimport type {\n GetConfigFn,\n ResolvedStartConfig,\n TanStackStartVitePluginCoreOptions,\n} from './types'\nimport type { ViteEnvironmentNames } from './constants'\nimport type {\n TanStackStartInputConfig,\n TanStackStartOutputConfig,\n} from './schema'\nimport type { PluginOption } from 'vite'\n\nfunction isFullUrl(str: string): boolean {\n try {\n new URL(str)\n return true\n } catch {\n return false\n }\n}\n\nexport function TanStackStartVitePluginCore(\n corePluginOpts: TanStackStartVitePluginCoreOptions,\n startPluginOpts: TanStackStartInputConfig,\n): Array<PluginOption> {\n // Determine the provider environment for server functions\n // If providerEnv is set, use that; otherwise default to SSR as the provider\n const serverFnProviderEnv =\n corePluginOpts.serverFn?.providerEnv || VITE_ENVIRONMENT_NAMES.server\n const ssrIsProvider = serverFnProviderEnv === VITE_ENVIRONMENT_NAMES.server\n\n const resolvedStartConfig: ResolvedStartConfig = {\n root: '',\n startFilePath: undefined,\n routerFilePath: '',\n srcDirectory: '',\n viteAppBase: '',\n serverFnProviderEnv,\n }\n\n let startConfig: TanStackStartOutputConfig | null\n const getConfig: GetConfigFn = () => {\n if (!resolvedStartConfig.root) {\n throw new Error(`Cannot get config before root is resolved`)\n }\n if (!startConfig) {\n startConfig = parseStartConfig(\n startPluginOpts,\n corePluginOpts,\n resolvedStartConfig.root,\n )\n }\n return { startConfig, resolvedStartConfig, corePluginOpts }\n }\n\n // When the router basepath and vite base are misaligned during dev,\n // we install a URL rewrite middleware instead of erroring.\n let needsDevBaseRewrite = false\n\n const capturedBundle: Partial<\n Record<ViteEnvironmentNames, vite.Rollup.OutputBundle>\n > = {}\n\n function getBundle(envName: ViteEnvironmentNames): vite.Rollup.OutputBundle {\n const bundle = capturedBundle[envName]\n if (!bundle) {\n throw new Error(`No bundle captured for environment: ${envName}`)\n }\n return bundle\n }\n\n const environments: Array<{ name: string; type: 'client' | 'server' }> = [\n { name: VITE_ENVIRONMENT_NAMES.client, type: 'client' },\n { name: VITE_ENVIRONMENT_NAMES.server, type: 'server' },\n ]\n if (\n corePluginOpts.serverFn?.providerEnv &&\n !environments.find((e) => e.name === corePluginOpts.serverFn?.providerEnv)\n ) {\n environments.push({\n name: corePluginOpts.serverFn.providerEnv,\n type: 'server',\n })\n }\n return [\n {\n name: 'tanstack-start-core:config',\n enforce: 'pre',\n async config(viteConfig, { command }) {\n resolvedStartConfig.viteAppBase = viteConfig.base ?? '/'\n if (!isFullUrl(resolvedStartConfig.viteAppBase)) {\n resolvedStartConfig.viteAppBase = joinPaths([\n '/',\n viteConfig.base,\n '/',\n ])\n }\n const root = viteConfig.root || process.cwd()\n resolvedStartConfig.root = root\n\n const { startConfig } = getConfig()\n if (startConfig.router.basepath === undefined) {\n if (!isFullUrl(resolvedStartConfig.viteAppBase)) {\n startConfig.router.basepath =\n resolvedStartConfig.viteAppBase.replace(/^\\/|\\/$/g, '')\n } else {\n startConfig.router.basepath = '/'\n }\n } else {\n if (command === 'serve' && !viteConfig.server?.middlewareMode) {\n // when serving, we must ensure that router basepath and viteAppBase are aligned\n if (\n !joinPaths(['/', startConfig.router.basepath, '/']).startsWith(\n joinPaths(['/', resolvedStartConfig.viteAppBase, '/']),\n )\n ) {\n // The router basepath and vite base are misaligned.\n // Instead of erroring, we install a dev-server middleware that\n // rewrites incoming request URLs to prepend the vite base prefix.\n // This allows users to have e.g. base: '/_ui/' for asset URLs\n // while keeping router basepath at '/' for page navigation.\n needsDevBaseRewrite = true\n }\n }\n }\n\n const TSS_SERVER_FN_BASE = joinPaths([\n '/',\n startConfig.router.basepath,\n startConfig.serverFns.base,\n '/',\n ])\n const resolvedSrcDirectory = join(root, startConfig.srcDirectory)\n resolvedStartConfig.srcDirectory = resolvedSrcDirectory\n\n const startFilePath = resolveEntry({\n type: 'start entry',\n configuredEntry: startConfig.start.entry,\n defaultEntry: 'start',\n resolvedSrcDirectory,\n required: false,\n })\n resolvedStartConfig.startFilePath = startFilePath\n\n const routerFilePath = resolveEntry({\n type: 'router entry',\n configuredEntry: startConfig.router.entry,\n defaultEntry: 'router',\n resolvedSrcDirectory,\n required: true,\n })\n resolvedStartConfig.routerFilePath = routerFilePath\n\n const clientEntryPath = resolveEntry({\n type: 'client entry',\n configuredEntry: startConfig.client.entry,\n defaultEntry: 'client',\n resolvedSrcDirectory,\n required: false,\n })\n\n const serverEntryPath = resolveEntry({\n type: 'server entry',\n configuredEntry: startConfig.server.entry,\n defaultEntry: 'server',\n resolvedSrcDirectory,\n required: false,\n })\n\n const clientAlias = vite.normalizePath(\n clientEntryPath ?? corePluginOpts.defaultEntryPaths.client,\n )\n const serverAlias = vite.normalizePath(\n serverEntryPath ?? corePluginOpts.defaultEntryPaths.server,\n )\n const startAlias = vite.normalizePath(\n startFilePath ?? corePluginOpts.defaultEntryPaths.start,\n )\n const routerAlias = vite.normalizePath(routerFilePath)\n\n const entryAliasConfiguration: Record<\n (typeof ENTRY_POINTS)[keyof typeof ENTRY_POINTS],\n string\n > = {\n [ENTRY_POINTS.client]: clientAlias,\n [ENTRY_POINTS.server]: serverAlias,\n [ENTRY_POINTS.start]: startAlias,\n [ENTRY_POINTS.router]: routerAlias,\n }\n\n const startPackageName =\n `@tanstack/${corePluginOpts.framework}-start` as const\n\n // crawl packages that have start in \"peerDependencies\"\n // see https://github.com/svitejs/vitefu/blob/d8d82fa121e3b2215ba437107093c77bde51b63b/src/index.js#L95-L101\n\n // this is currently uncached; could be implemented similarly as vite handles lock file changes\n // see https://github.com/vitejs/vite/blob/557f797d29422027e8c451ca50dd84bf8c41b5f0/packages/vite/src/node/optimizer/index.ts#L1282\n\n const crawlFrameworkPkgsResult = await crawlFrameworkPkgs({\n root: process.cwd(),\n isBuild: command === 'build',\n isFrameworkPkgByJson(pkgJson) {\n const peerDependencies = pkgJson['peerDependencies']\n\n if (peerDependencies) {\n if (\n startPackageName in peerDependencies ||\n '@tanstack/start-client-core' in peerDependencies\n ) {\n return true\n }\n }\n\n return false\n },\n })\n\n return {\n // see https://vite.dev/config/shared-options.html#apptype\n // this will prevent vite from injecting middlewares that we don't want\n appType: viteConfig.appType ?? 'custom',\n environments: {\n [VITE_ENVIRONMENT_NAMES.client]: {\n consumer: 'client',\n build: {\n rollupOptions: {\n input: {\n main: ENTRY_POINTS.client,\n },\n },\n outDir: getClientOutputDirectory(viteConfig),\n },\n optimizeDeps: {\n exclude: crawlFrameworkPkgsResult.optimizeDeps.exclude,\n // Ensure user code can be crawled for dependencies\n entries: [clientAlias, routerAlias].map((entry) =>\n // Entries are treated as `tinyglobby` patterns so need to be escaped\n escapePath(entry),\n ),\n },\n },\n [VITE_ENVIRONMENT_NAMES.server]: {\n consumer: 'server',\n build: {\n ssr: true,\n rollupOptions: {\n input:\n viteConfig.environments?.[VITE_ENVIRONMENT_NAMES.server]\n ?.build?.rollupOptions?.input ?? serverAlias,\n },\n outDir: getServerOutputDirectory(viteConfig),\n commonjsOptions: {\n include: [/node_modules/],\n },\n copyPublicDir:\n viteConfig.environments?.[VITE_ENVIRONMENT_NAMES.server]\n ?.build?.copyPublicDir ?? false,\n },\n optimizeDeps: {\n // Ensure user code can be crawled for dependencies\n entries: [serverAlias, startAlias, routerAlias].map((entry) =>\n // Entries are treated as `tinyglobby` patterns so need to be escaped\n escapePath(entry),\n ),\n },\n },\n },\n\n resolve: {\n noExternal: [\n // ENTRY_POINTS.start,\n '@tanstack/start**',\n `@tanstack/${corePluginOpts.framework}-start**`,\n ...crawlFrameworkPkgsResult.ssr.noExternal.sort(),\n ],\n alias: {\n ...entryAliasConfiguration,\n },\n },\n /* prettier-ignore */\n define: {\n // define is an esbuild function that replaces the any instances of given keys with the given values\n // i.e: __FRAMEWORK_NAME__ can be replaced with JSON.stringify(\"TanStack Start\")\n // This is not the same as injecting environment variables.\n\n ...defineReplaceEnv('TSS_SERVER_FN_BASE', TSS_SERVER_FN_BASE),\n ...defineReplaceEnv('TSS_CLIENT_OUTPUT_DIR', getClientOutputDirectory(viteConfig)),\n ...defineReplaceEnv('TSS_ROUTER_BASEPATH', startConfig.router.basepath),\n ...(command === 'serve' ? defineReplaceEnv('TSS_SHELL', startConfig.spa?.enabled ? 'true' : 'false') : {}),\n ...defineReplaceEnv('TSS_DEV_SERVER', command === 'serve' ? 'true' : 'false'),\n // Dev SSR styles: enabled flag and basepath (defaults to vite base for asset URL alignment)\n ...defineReplaceEnv('TSS_DEV_SSR_STYLES_ENABLED', startConfig.dev.ssrStyles.enabled ? 'true' : 'false'),\n ...defineReplaceEnv('TSS_DEV_SSR_STYLES_BASEPATH', startConfig.dev.ssrStyles.basepath ?? resolvedStartConfig.viteAppBase),\n // Replace NODE_ENV during build (unless opted out) for dead code elimination in server bundles\n ...(command === 'build' && startConfig.server.build.staticNodeEnv ? {\n 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || viteConfig.mode || 'production'),\n } : {}),\n },\n builder: {\n sharedPlugins: true,\n async buildApp(builder) {\n const client = builder.environments[VITE_ENVIRONMENT_NAMES.client]\n const server = builder.environments[VITE_ENVIRONMENT_NAMES.server]\n\n if (!client) {\n throw new Error('Client environment not found')\n }\n\n if (!server) {\n throw new Error('SSR environment not found')\n }\n\n if (!client.isBuilt) {\n // Build the client bundle first\n await builder.build(client)\n }\n if (!server.isBuilt) {\n // Build the SSR bundle\n await builder.build(server)\n }\n\n // If a custom provider environment is configured (not SSR),\n // build it last so the manifest includes functions from all environments\n if (!ssrIsProvider) {\n const providerEnv = builder.environments[serverFnProviderEnv]\n if (!providerEnv) {\n throw new Error(\n `Provider environment \"${serverFnProviderEnv}\" not found`,\n )\n }\n if (!providerEnv.isBuilt) {\n // Build the provider environment last\n // This ensures all server functions are discovered from client/ssr builds\n await builder.build(providerEnv)\n }\n }\n },\n },\n }\n },\n },\n // Separate plugin for buildApp hook with enforce: 'post'\n // This ensures proper ordering with other plugins that also have\n // buildApp hooks with order: 'post'. The enforce: 'post' ensures this\n // runs after other plugins (like Nitro) complete their builds.\n {\n name: 'tanstack-start-core:post-build',\n enforce: 'post',\n buildApp: {\n order: 'post',\n async handler(builder) {\n const { startConfig } = getConfig()\n await postServerBuild({ builder, startConfig })\n },\n },\n },\n // Server function plugin handles:\n // 1. Identifying createServerFn().handler() calls\n // 2. Extracting server functions to separate modules\n // 3. Replacing call sites with RPC stubs\n // 4. Generating the server function manifest\n // Also handles createIsomorphicFn, createServerOnlyFn, createClientOnlyFn, createMiddleware\n startCompilerPlugin({\n framework: corePluginOpts.framework,\n environments,\n generateFunctionId: startPluginOpts?.serverFns?.generateFunctionId,\n providerEnvName: serverFnProviderEnv,\n }),\n importProtectionPlugin({\n getConfig,\n framework: corePluginOpts.framework,\n environments,\n providerEnvName: serverFnProviderEnv,\n }),\n tanStackStartRouter(startPluginOpts, getConfig, corePluginOpts),\n loadEnvPlugin(),\n startManifestPlugin({\n getClientBundle: () => getBundle(VITE_ENVIRONMENT_NAMES.client),\n getConfig,\n }),\n // When the vite base and router basepath are misaligned (e.g. base: '/_ui/', basepath: '/'),\n // install a middleware that rewrites incoming request URLs to prepend the vite base prefix.\n // This allows Vite's internal base middleware to accept the requests, then strips the prefix\n // before passing to the SSR handler.\n // Registered BEFORE devServerPlugin so this middleware is added to the Connect stack first,\n // ensuring all subsequent middlewares (CSS, SSR, etc.) see the rewritten URL.\n {\n name: 'tanstack-start-core:dev-base-rewrite',\n configureServer(server) {\n if (!needsDevBaseRewrite) {\n return\n }\n const basePrefix = resolvedStartConfig.viteAppBase.replace(/\\/$/, '')\n server.middlewares.use((req, _res, next) => {\n if (req.url && !req.url.startsWith(basePrefix)) {\n req.url = basePrefix + req.url\n }\n next()\n })\n },\n },\n devServerPlugin({\n getConfig,\n devSsrStylesEnabled: startPluginOpts?.dev?.ssrStyles?.enabled ?? true,\n }),\n previewServerPlugin(),\n {\n name: 'tanstack-start:core:capture-bundle',\n applyToEnvironment(e) {\n return (\n e.name === VITE_ENVIRONMENT_NAMES.client ||\n e.name === VITE_ENVIRONMENT_NAMES.server\n )\n },\n enforce: 'post',\n generateBundle(_options, bundle) {\n const environment = this.environment.name as ViteEnvironmentNames\n if (!Object.values(VITE_ENVIRONMENT_NAMES).includes(environment)) {\n throw new Error(`Unknown environment: ${environment}`)\n }\n capturedBundle[environment] = bundle\n },\n },\n ]\n}\n\nfunction defineReplaceEnv<TKey extends string, TValue extends string>(\n key: TKey,\n value: TValue,\n): { [P in `process.env.${TKey}` | `import.meta.env.${TKey}`]: TValue } {\n return {\n [`process.env.${key}`]: JSON.stringify(value),\n [`import.meta.env.${key}`]: JSON.stringify(value),\n } as { [P in `process.env.${TKey}` | `import.meta.env.${TKey}`]: TValue }\n}\n"],"mappings":"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"}
@@ -1,56 +1,42 @@
1
- import { HEADERS } from "@tanstack/start-server-core";
2
- import { buildSitemap } from "./build-sitemap.js";
3
1
  import { VITE_ENVIRONMENT_NAMES } from "./constants.js";
2
+ import { buildSitemap } from "./build-sitemap.js";
4
3
  import { prerender } from "./prerender.js";
5
- async function postServerBuild({
6
- builder,
7
- startConfig
8
- }) {
9
- if (startConfig.prerender?.enabled !== false) {
10
- startConfig.prerender = {
11
- ...startConfig.prerender,
12
- enabled: startConfig.prerender?.enabled ?? startConfig.pages.some(
13
- (d) => typeof d === "string" ? false : !!d.prerender?.enabled
14
- )
15
- };
16
- }
17
- if (startConfig.spa?.enabled) {
18
- startConfig.prerender = {
19
- ...startConfig.prerender,
20
- enabled: true
21
- };
22
- const maskUrl = new URL(startConfig.spa.maskPath, "http://localhost");
23
- if (maskUrl.origin !== "http://localhost") {
24
- throw new Error("spa.maskPath must be a path (no protocol/host)");
25
- }
26
- startConfig.pages.push({
27
- path: maskUrl.toString().replace("http://localhost", ""),
28
- prerender: {
29
- ...startConfig.spa.prerender,
30
- headers: {
31
- ...startConfig.spa.prerender.headers,
32
- [HEADERS.TSS_SHELL]: "true"
33
- }
34
- },
35
- sitemap: {
36
- exclude: true
37
- }
38
- });
39
- }
40
- if (startConfig.prerender.enabled) {
41
- await prerender({
42
- startConfig,
43
- builder
44
- });
45
- }
46
- if (startConfig.sitemap?.enabled) {
47
- buildSitemap({
48
- startConfig,
49
- publicDir: builder.environments[VITE_ENVIRONMENT_NAMES.client]?.config.build.outDir ?? builder.config.build.outDir
50
- });
51
- }
4
+ import { HEADERS } from "@tanstack/start-server-core";
5
+ //#region src/post-server-build.ts
6
+ async function postServerBuild({ builder, startConfig }) {
7
+ if (startConfig.prerender?.enabled !== false) startConfig.prerender = {
8
+ ...startConfig.prerender,
9
+ enabled: startConfig.prerender?.enabled ?? startConfig.pages.some((d) => typeof d === "string" ? false : !!d.prerender?.enabled)
10
+ };
11
+ if (startConfig.spa?.enabled) {
12
+ startConfig.prerender = {
13
+ ...startConfig.prerender,
14
+ enabled: true
15
+ };
16
+ const maskUrl = new URL(startConfig.spa.maskPath, "http://localhost");
17
+ if (maskUrl.origin !== "http://localhost") throw new Error("spa.maskPath must be a path (no protocol/host)");
18
+ startConfig.pages.push({
19
+ path: maskUrl.toString().replace("http://localhost", ""),
20
+ prerender: {
21
+ ...startConfig.spa.prerender,
22
+ headers: {
23
+ ...startConfig.spa.prerender.headers,
24
+ [HEADERS.TSS_SHELL]: "true"
25
+ }
26
+ },
27
+ sitemap: { exclude: true }
28
+ });
29
+ }
30
+ if (startConfig.prerender.enabled) await prerender({
31
+ startConfig,
32
+ builder
33
+ });
34
+ if (startConfig.sitemap?.enabled) buildSitemap({
35
+ startConfig,
36
+ publicDir: builder.environments[VITE_ENVIRONMENT_NAMES.client]?.config.build.outDir ?? builder.config.build.outDir
37
+ });
52
38
  }
53
- export {
54
- postServerBuild
55
- };
56
- //# sourceMappingURL=post-server-build.js.map
39
+ //#endregion
40
+ export { postServerBuild };
41
+
42
+ //# sourceMappingURL=post-server-build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"post-server-build.js","sources":["../../src/post-server-build.ts"],"sourcesContent":["import { HEADERS } from '@tanstack/start-server-core'\nimport { buildSitemap } from './build-sitemap'\nimport { VITE_ENVIRONMENT_NAMES } from './constants'\nimport { prerender } from './prerender'\nimport type { TanStackStartOutputConfig } from './schema'\nimport type { ViteBuilder } from 'vite'\n\nexport async function postServerBuild({\n builder,\n startConfig,\n}: {\n builder: ViteBuilder\n startConfig: TanStackStartOutputConfig\n}) {\n // If the user has not set a prerender option, we need to set it to true\n // if the pages array is not empty and has sub options requiring for prerendering\n // If the user has explicitly set prerender.enabled, this should be respected\n if (startConfig.prerender?.enabled !== false) {\n startConfig.prerender = {\n ...startConfig.prerender,\n enabled:\n startConfig.prerender?.enabled ??\n startConfig.pages.some((d) =>\n typeof d === 'string' ? false : !!d.prerender?.enabled,\n ),\n }\n }\n\n // Setup the options for prerendering the SPA shell (i.e `src/routes/__root.tsx`)\n if (startConfig.spa?.enabled) {\n startConfig.prerender = {\n ...startConfig.prerender,\n enabled: true,\n }\n\n const maskUrl = new URL(startConfig.spa.maskPath, 'http://localhost')\n if (maskUrl.origin !== 'http://localhost') {\n throw new Error('spa.maskPath must be a path (no protocol/host)')\n }\n\n startConfig.pages.push({\n path: maskUrl.toString().replace('http://localhost', ''),\n prerender: {\n ...startConfig.spa.prerender,\n headers: {\n ...startConfig.spa.prerender.headers,\n [HEADERS.TSS_SHELL]: 'true',\n },\n },\n sitemap: {\n exclude: true,\n },\n })\n }\n\n // Run the prerendering process\n if (startConfig.prerender.enabled) {\n await prerender({\n startConfig,\n builder,\n })\n }\n\n // Run the sitemap build process\n if (startConfig.sitemap?.enabled) {\n buildSitemap({\n startConfig,\n publicDir:\n builder.environments[VITE_ENVIRONMENT_NAMES.client]?.config.build\n .outDir ?? builder.config.build.outDir,\n })\n }\n}\n"],"names":[],"mappings":";;;;AAOA,eAAsB,gBAAgB;AAAA,EACpC;AAAA,EACA;AACF,GAGG;AAID,MAAI,YAAY,WAAW,YAAY,OAAO;AAC5C,gBAAY,YAAY;AAAA,MACtB,GAAG,YAAY;AAAA,MACf,SACE,YAAY,WAAW,WACvB,YAAY,MAAM;AAAA,QAAK,CAAC,MACtB,OAAO,MAAM,WAAW,QAAQ,CAAC,CAAC,EAAE,WAAW;AAAA,MAAA;AAAA,IACjD;AAAA,EAEN;AAGA,MAAI,YAAY,KAAK,SAAS;AAC5B,gBAAY,YAAY;AAAA,MACtB,GAAG,YAAY;AAAA,MACf,SAAS;AAAA,IAAA;AAGX,UAAM,UAAU,IAAI,IAAI,YAAY,IAAI,UAAU,kBAAkB;AACpE,QAAI,QAAQ,WAAW,oBAAoB;AACzC,YAAM,IAAI,MAAM,gDAAgD;AAAA,IAClE;AAEA,gBAAY,MAAM,KAAK;AAAA,MACrB,MAAM,QAAQ,SAAA,EAAW,QAAQ,oBAAoB,EAAE;AAAA,MACvD,WAAW;AAAA,QACT,GAAG,YAAY,IAAI;AAAA,QACnB,SAAS;AAAA,UACP,GAAG,YAAY,IAAI,UAAU;AAAA,UAC7B,CAAC,QAAQ,SAAS,GAAG;AAAA,QAAA;AAAA,MACvB;AAAA,MAEF,SAAS;AAAA,QACP,SAAS;AAAA,MAAA;AAAA,IACX,CACD;AAAA,EACH;AAGA,MAAI,YAAY,UAAU,SAAS;AACjC,UAAM,UAAU;AAAA,MACd;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH;AAGA,MAAI,YAAY,SAAS,SAAS;AAChC,iBAAa;AAAA,MACX;AAAA,MACA,WACE,QAAQ,aAAa,uBAAuB,MAAM,GAAG,OAAO,MACzD,UAAU,QAAQ,OAAO,MAAM;AAAA,IAAA,CACrC;AAAA,EACH;AACF;"}
1
+ {"version":3,"file":"post-server-build.js","names":[],"sources":["../../src/post-server-build.ts"],"sourcesContent":["import { HEADERS } from '@tanstack/start-server-core'\nimport { buildSitemap } from './build-sitemap'\nimport { VITE_ENVIRONMENT_NAMES } from './constants'\nimport { prerender } from './prerender'\nimport type { TanStackStartOutputConfig } from './schema'\nimport type { ViteBuilder } from 'vite'\n\nexport async function postServerBuild({\n builder,\n startConfig,\n}: {\n builder: ViteBuilder\n startConfig: TanStackStartOutputConfig\n}) {\n // If the user has not set a prerender option, we need to set it to true\n // if the pages array is not empty and has sub options requiring for prerendering\n // If the user has explicitly set prerender.enabled, this should be respected\n if (startConfig.prerender?.enabled !== false) {\n startConfig.prerender = {\n ...startConfig.prerender,\n enabled:\n startConfig.prerender?.enabled ??\n startConfig.pages.some((d) =>\n typeof d === 'string' ? false : !!d.prerender?.enabled,\n ),\n }\n }\n\n // Setup the options for prerendering the SPA shell (i.e `src/routes/__root.tsx`)\n if (startConfig.spa?.enabled) {\n startConfig.prerender = {\n ...startConfig.prerender,\n enabled: true,\n }\n\n const maskUrl = new URL(startConfig.spa.maskPath, 'http://localhost')\n if (maskUrl.origin !== 'http://localhost') {\n throw new Error('spa.maskPath must be a path (no protocol/host)')\n }\n\n startConfig.pages.push({\n path: maskUrl.toString().replace('http://localhost', ''),\n prerender: {\n ...startConfig.spa.prerender,\n headers: {\n ...startConfig.spa.prerender.headers,\n [HEADERS.TSS_SHELL]: 'true',\n },\n },\n sitemap: {\n exclude: true,\n },\n })\n }\n\n // Run the prerendering process\n if (startConfig.prerender.enabled) {\n await prerender({\n startConfig,\n builder,\n })\n }\n\n // Run the sitemap build process\n if (startConfig.sitemap?.enabled) {\n buildSitemap({\n startConfig,\n publicDir:\n builder.environments[VITE_ENVIRONMENT_NAMES.client]?.config.build\n .outDir ?? builder.config.build.outDir,\n })\n }\n}\n"],"mappings":";;;;;AAOA,eAAsB,gBAAgB,EACpC,SACA,eAIC;AAID,KAAI,YAAY,WAAW,YAAY,MACrC,aAAY,YAAY;EACtB,GAAG,YAAY;EACf,SACE,YAAY,WAAW,WACvB,YAAY,MAAM,MAAM,MACtB,OAAO,MAAM,WAAW,QAAQ,CAAC,CAAC,EAAE,WAAW,QAChD;EACJ;AAIH,KAAI,YAAY,KAAK,SAAS;AAC5B,cAAY,YAAY;GACtB,GAAG,YAAY;GACf,SAAS;GACV;EAED,MAAM,UAAU,IAAI,IAAI,YAAY,IAAI,UAAU,mBAAmB;AACrE,MAAI,QAAQ,WAAW,mBACrB,OAAM,IAAI,MAAM,iDAAiD;AAGnE,cAAY,MAAM,KAAK;GACrB,MAAM,QAAQ,UAAU,CAAC,QAAQ,oBAAoB,GAAG;GACxD,WAAW;IACT,GAAG,YAAY,IAAI;IACnB,SAAS;KACP,GAAG,YAAY,IAAI,UAAU;MAC5B,QAAQ,YAAY;KACtB;IACF;GACD,SAAS,EACP,SAAS,MACV;GACF,CAAC;;AAIJ,KAAI,YAAY,UAAU,QACxB,OAAM,UAAU;EACd;EACA;EACD,CAAC;AAIJ,KAAI,YAAY,SAAS,QACvB,cAAa;EACX;EACA,WACE,QAAQ,aAAa,uBAAuB,SAAS,OAAO,MACzD,UAAU,QAAQ,OAAO,MAAM;EACrC,CAAC"}