@tanstack/start-plugin-core 1.132.0-alpha.5 → 1.132.0-alpha.7
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.
- package/dist/esm/plugin.js +2 -2
- package/dist/esm/plugin.js.map +1 -1
- package/dist/esm/schema.d.ts +20 -28
- package/dist/esm/schema.js +10 -14
- package/dist/esm/schema.js.map +1 -1
- package/dist/esm/start-compiler-plugin/compilers.d.ts +0 -6
- package/dist/esm/start-compiler-plugin/compilers.js +12 -271
- package/dist/esm/start-compiler-plugin/compilers.js.map +1 -1
- package/dist/esm/start-compiler-plugin/constants.d.ts +1 -1
- package/dist/esm/start-compiler-plugin/constants.js +2 -2
- package/dist/esm/start-compiler-plugin/constants.js.map +1 -1
- package/dist/esm/start-compiler-plugin/envOnly.d.ts +5 -0
- package/dist/esm/start-compiler-plugin/envOnly.js +41 -0
- package/dist/esm/start-compiler-plugin/envOnly.js.map +1 -0
- package/dist/esm/start-compiler-plugin/isomorphicFn.d.ts +4 -0
- package/dist/esm/start-compiler-plugin/isomorphicFn.js +49 -0
- package/dist/esm/start-compiler-plugin/isomorphicFn.js.map +1 -0
- package/dist/esm/start-compiler-plugin/middleware.d.ts +4 -0
- package/dist/esm/start-compiler-plugin/middleware.js +51 -0
- package/dist/esm/start-compiler-plugin/middleware.js.map +1 -0
- package/dist/esm/start-compiler-plugin/plugin.js +59 -26
- package/dist/esm/start-compiler-plugin/plugin.js.map +1 -1
- package/dist/esm/start-compiler-plugin/serverFileRoute.d.ts +4 -0
- package/dist/esm/start-compiler-plugin/serverFileRoute.js +38 -0
- package/dist/esm/start-compiler-plugin/serverFileRoute.js.map +1 -0
- package/dist/esm/start-compiler-plugin/serverFn.d.ts +4 -0
- package/dist/esm/start-compiler-plugin/serverFn.js +87 -0
- package/dist/esm/start-compiler-plugin/serverFn.js.map +1 -0
- package/dist/esm/start-compiler-plugin/utils.d.ts +13 -0
- package/dist/esm/start-compiler-plugin/utils.js +30 -0
- package/dist/esm/start-compiler-plugin/utils.js.map +1 -0
- package/package.json +2 -2
- package/src/plugin.ts +2 -2
- package/src/schema.ts +10 -16
- package/src/start-compiler-plugin/compilers.ts +16 -462
- package/src/start-compiler-plugin/constants.ts +2 -2
- package/src/start-compiler-plugin/envOnly.ts +58 -0
- package/src/start-compiler-plugin/isomorphicFn.ts +78 -0
- package/src/start-compiler-plugin/middleware.ts +79 -0
- package/src/start-compiler-plugin/plugin.ts +67 -36
- package/src/start-compiler-plugin/serverFileRoute.ts +59 -0
- package/src/start-compiler-plugin/serverFn.ts +163 -0
- package/src/start-compiler-plugin/utils.ts +41 -0
package/dist/esm/plugin.js
CHANGED
|
@@ -27,7 +27,7 @@ function TanStackStartVitePluginCore(corePluginOpts, startPluginOpts) {
|
|
|
27
27
|
}
|
|
28
28
|
return [
|
|
29
29
|
tanStackStartRouter({
|
|
30
|
-
...startConfig.
|
|
30
|
+
...startConfig.router,
|
|
31
31
|
target: corePluginOpts.framework,
|
|
32
32
|
autoCodeSplitting: true
|
|
33
33
|
}),
|
|
@@ -37,7 +37,7 @@ function TanStackStartVitePluginCore(corePluginOpts, startPluginOpts) {
|
|
|
37
37
|
const viteAppBase = trimPathRight(viteConfig.base || "/");
|
|
38
38
|
globalThis.TSS_APP_BASE = viteAppBase;
|
|
39
39
|
const root = viteConfig.root || process.cwd();
|
|
40
|
-
const resolvedSrcDirectory = join(root, startConfig.
|
|
40
|
+
const resolvedSrcDirectory = join(root, startConfig.srcDirectory);
|
|
41
41
|
const routerFilePath = resolveEntry({
|
|
42
42
|
type: "router entry",
|
|
43
43
|
configuredEntry: startConfig.router.entry,
|
package/dist/esm/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["../../src/plugin.ts"],"sourcesContent":["import path from 'node:path'\nimport { trimPathRight } from '@tanstack/router-core'\nimport { VIRTUAL_MODULES } from '@tanstack/start-server-core'\nimport { TanStackServerFnPluginEnv } from '@tanstack/server-functions-plugin'\nimport * as vite from 'vite'\nimport { crawlFrameworkPkgs } from 'vitefu'\nimport { join } from 'pathe'\nimport { startManifestPlugin } from './start-manifest-plugin/plugin'\nimport { startCompilerPlugin } from './start-compiler-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 { parseStartConfig } from './schema'\nimport { resolveEntry } from './resolve-entries'\nimport {\n getClientOutputDirectory,\n getServerOutputDirectory,\n} from './output-directory'\nimport { postServerBuild } from './post-server-build'\nimport type { ViteEnvironmentNames } from './constants'\nimport type { TanStackStartInputConfig } from './schema'\nimport type { PluginOption } from 'vite'\nimport type { CompileStartFrameworkOptions } from './start-compiler-plugin/compilers'\n\nexport interface TanStackStartVitePluginCoreOptions {\n framework: CompileStartFrameworkOptions\n defaultEntryPaths: {\n client: string\n server: string\n }\n crawlPackages?: (opts: {\n name: string\n peerDependencies: Record<string, any>\n exports?: Record<string, any> | string\n }) => 'include' | 'exclude' | undefined\n}\n\nexport function TanStackStartVitePluginCore(\n corePluginOpts: TanStackStartVitePluginCoreOptions,\n startPluginOpts: TanStackStartInputConfig,\n): Array<PluginOption> {\n const startConfig = parseStartConfig(startPluginOpts)\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 return [\n tanStackStartRouter({\n ...startConfig.tsr,\n target: corePluginOpts.framework,\n autoCodeSplitting: true,\n }),\n {\n name: 'tanstack-start-core:config',\n async config(viteConfig, { command }) {\n const viteAppBase = trimPathRight(viteConfig.base || '/')\n globalThis.TSS_APP_BASE = viteAppBase\n\n const root = viteConfig.root || process.cwd()\n const resolvedSrcDirectory = join(root, startConfig.tsr.srcDirectory)\n\n const routerFilePath = resolveEntry({\n type: 'router entry',\n configuredEntry: startConfig.router.entry,\n defaultEntry: 'router',\n root,\n resolvedSrcDirectory,\n required: true,\n })\n const clientEntryPath = resolveEntry({\n type: 'client entry',\n configuredEntry: startConfig.client.entry,\n defaultEntry: 'client',\n root,\n resolvedSrcDirectory,\n required: false,\n })\n\n const serverEntryPath = resolveEntry({\n type: 'server entry',\n configuredEntry: startConfig.server.entry,\n defaultEntry: 'server',\n root,\n resolvedSrcDirectory,\n required: false,\n })\n\n let clientAlias: string\n if (clientEntryPath) {\n clientAlias = vite.normalizePath(\n path.join('/@fs', path.resolve(root, clientEntryPath)),\n )\n } else {\n clientAlias = corePluginOpts.defaultEntryPaths.client\n }\n let serverAlias: string\n if (serverEntryPath) {\n serverAlias = vite.normalizePath(path.resolve(root, serverEntryPath))\n } else {\n serverAlias = corePluginOpts.defaultEntryPaths.server\n }\n const entryAliasConfiguration: Record<\n (typeof ENTRY_POINTS)[keyof typeof ENTRY_POINTS],\n string\n > = {\n [ENTRY_POINTS.router]: routerFilePath,\n [ENTRY_POINTS.client]: clientAlias,\n [ENTRY_POINTS.server]: serverAlias,\n }\n\n // TODO\n /* const nitroOutputPublicDir = await (async () => {\n // Create a dummy nitro app to get the resolved public output path\n const dummyNitroApp = await createNitro({\n preset: startConfig.target,\n compatibilityDate: '2024-12-01',\n })\n\n const nitroOutputPublicDir = dummyNitroApp.options.output.publicDir\n await dummyNitroApp.close()\n\n return nitroOutputPublicDir\n })()*/\n\n const startPackageName = `@tanstack/${corePluginOpts.framework}-start`\n const routerPackageName = `@tanstack/${corePluginOpts.framework}-router`\n\n const additionalOptimizeDeps = {\n include: new Set<string>(),\n exclude: new Set<string>(),\n }\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 result = await crawlFrameworkPkgs({\n root: process.cwd(),\n isBuild: command === 'build',\n isFrameworkPkgByJson(pkgJson) {\n if ([routerPackageName, startPackageName].includes(pkgJson.name)) {\n return false\n }\n\n const peerDependencies = pkgJson['peerDependencies']\n\n if (peerDependencies) {\n const internalResult = corePluginOpts.crawlPackages?.({\n name: pkgJson.name,\n peerDependencies,\n exports: pkgJson.exports,\n })\n if (internalResult) {\n if (internalResult === 'exclude') {\n additionalOptimizeDeps.exclude.add(pkgJson.name)\n } else {\n additionalOptimizeDeps.include.add(pkgJson.name)\n }\n }\n return (\n startPackageName in peerDependencies ||\n routerPackageName in peerDependencies\n )\n }\n return false\n },\n })\n\n return {\n base: viteAppBase,\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 },\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 ?? ENTRY_POINTS.server,\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 exclude: [\n ...Object.values(VIRTUAL_MODULES),\n ...result.optimizeDeps.exclude.sort(),\n ...additionalOptimizeDeps.exclude,\n `@tanstack/${corePluginOpts.framework}-start/server`,\n ],\n include: [\n ...additionalOptimizeDeps.include,\n ...result.optimizeDeps.include.sort(),\n ],\n },\n },\n },\n resolve: {\n noExternal: [\n '@tanstack/start**',\n `@tanstack/${corePluginOpts.framework}-start**`,\n ...Object.values(VIRTUAL_MODULES),\n startPackageName,\n ...result.ssr.noExternal.sort(),\n ],\n dedupe: [startPackageName],\n alias: {\n ...entryAliasConfiguration,\n },\n },\n optimizeDeps: {\n exclude: [\n ...Object.values(VIRTUAL_MODULES),\n startPackageName,\n ...result.optimizeDeps.exclude.sort(),\n ...additionalOptimizeDeps.exclude,\n ],\n include: [...additionalOptimizeDeps.include],\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', startConfig.serverFns.base),\n ...defineReplaceEnv('TSS_CLIENT_OUTPUT_DIR', getClientOutputDirectory(viteConfig)),\n ...defineReplaceEnv('TSS_APP_BASE', viteAppBase),\n ...(command === 'serve' ? defineReplaceEnv('TSS_SHELL', startConfig.spa?.enabled ? 'true' : 'false') : {}),\n ...defineReplaceEnv('TSS_DEV_SERVER', command === 'serve' ? 'true' : 'false'),\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 const serverBundle = getBundle(VITE_ENVIRONMENT_NAMES.server)\n await postServerBuild({ builder, startConfig, serverBundle })\n },\n },\n }\n },\n },\n // N.B. TanStackStartCompilerPlugin must be before the TanStackServerFnPluginEnv\n startCompilerPlugin(corePluginOpts.framework, {\n client: { envName: VITE_ENVIRONMENT_NAMES.client },\n server: { envName: VITE_ENVIRONMENT_NAMES.server },\n }),\n TanStackServerFnPluginEnv({\n // This is the ID that will be available to look up and import\n // our server function manifest and resolve its module\n manifestVirtualImportId: VIRTUAL_MODULES.serverFnManifest,\n client: {\n getRuntimeCode: () =>\n `import { createClientRpc } from '@tanstack/${corePluginOpts.framework}-start/client'`,\n replacer: (d) => `createClientRpc('${d.functionId}')`,\n envName: VITE_ENVIRONMENT_NAMES.client,\n },\n server: {\n getRuntimeCode: () =>\n `import { createServerRpc } from '@tanstack/${corePluginOpts.framework}-start/server'`,\n replacer: (d) => `createServerRpc('${d.functionId}', ${d.fn})`,\n envName: VITE_ENVIRONMENT_NAMES.server,\n },\n }),\n loadEnvPlugin(),\n startManifestPlugin({\n getClientBundle: () => getBundle(VITE_ENVIRONMENT_NAMES.client),\n }),\n devServerPlugin({ startConfig }),\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":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["../../src/plugin.ts"],"sourcesContent":["import path from 'node:path'\nimport { trimPathRight } from '@tanstack/router-core'\nimport { VIRTUAL_MODULES } from '@tanstack/start-server-core'\nimport { TanStackServerFnPluginEnv } from '@tanstack/server-functions-plugin'\nimport * as vite from 'vite'\nimport { crawlFrameworkPkgs } from 'vitefu'\nimport { join } from 'pathe'\nimport { startManifestPlugin } from './start-manifest-plugin/plugin'\nimport { startCompilerPlugin } from './start-compiler-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 { parseStartConfig } from './schema'\nimport { resolveEntry } from './resolve-entries'\nimport {\n getClientOutputDirectory,\n getServerOutputDirectory,\n} from './output-directory'\nimport { postServerBuild } from './post-server-build'\nimport type { ViteEnvironmentNames } from './constants'\nimport type { TanStackStartInputConfig } from './schema'\nimport type { PluginOption } from 'vite'\nimport type { CompileStartFrameworkOptions } from './start-compiler-plugin/compilers'\n\nexport interface TanStackStartVitePluginCoreOptions {\n framework: CompileStartFrameworkOptions\n defaultEntryPaths: {\n client: string\n server: string\n }\n crawlPackages?: (opts: {\n name: string\n peerDependencies: Record<string, any>\n exports?: Record<string, any> | string\n }) => 'include' | 'exclude' | undefined\n}\n\nexport function TanStackStartVitePluginCore(\n corePluginOpts: TanStackStartVitePluginCoreOptions,\n startPluginOpts: TanStackStartInputConfig,\n): Array<PluginOption> {\n const startConfig = parseStartConfig(startPluginOpts)\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 return [\n tanStackStartRouter({\n ...startConfig.router,\n target: corePluginOpts.framework,\n autoCodeSplitting: true,\n }),\n {\n name: 'tanstack-start-core:config',\n async config(viteConfig, { command }) {\n const viteAppBase = trimPathRight(viteConfig.base || '/')\n globalThis.TSS_APP_BASE = viteAppBase\n\n const root = viteConfig.root || process.cwd()\n const resolvedSrcDirectory = join(root, startConfig.srcDirectory)\n\n const routerFilePath = resolveEntry({\n type: 'router entry',\n configuredEntry: startConfig.router.entry,\n defaultEntry: 'router',\n root,\n resolvedSrcDirectory,\n required: true,\n })\n const clientEntryPath = resolveEntry({\n type: 'client entry',\n configuredEntry: startConfig.client.entry,\n defaultEntry: 'client',\n root,\n resolvedSrcDirectory,\n required: false,\n })\n\n const serverEntryPath = resolveEntry({\n type: 'server entry',\n configuredEntry: startConfig.server.entry,\n defaultEntry: 'server',\n root,\n resolvedSrcDirectory,\n required: false,\n })\n\n let clientAlias: string\n if (clientEntryPath) {\n clientAlias = vite.normalizePath(\n path.join('/@fs', path.resolve(root, clientEntryPath)),\n )\n } else {\n clientAlias = corePluginOpts.defaultEntryPaths.client\n }\n let serverAlias: string\n if (serverEntryPath) {\n serverAlias = vite.normalizePath(path.resolve(root, serverEntryPath))\n } else {\n serverAlias = corePluginOpts.defaultEntryPaths.server\n }\n const entryAliasConfiguration: Record<\n (typeof ENTRY_POINTS)[keyof typeof ENTRY_POINTS],\n string\n > = {\n [ENTRY_POINTS.router]: routerFilePath,\n [ENTRY_POINTS.client]: clientAlias,\n [ENTRY_POINTS.server]: serverAlias,\n }\n\n // TODO\n /* const nitroOutputPublicDir = await (async () => {\n // Create a dummy nitro app to get the resolved public output path\n const dummyNitroApp = await createNitro({\n preset: startConfig.target,\n compatibilityDate: '2024-12-01',\n })\n\n const nitroOutputPublicDir = dummyNitroApp.options.output.publicDir\n await dummyNitroApp.close()\n\n return nitroOutputPublicDir\n })()*/\n\n const startPackageName = `@tanstack/${corePluginOpts.framework}-start`\n const routerPackageName = `@tanstack/${corePluginOpts.framework}-router`\n\n const additionalOptimizeDeps = {\n include: new Set<string>(),\n exclude: new Set<string>(),\n }\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 result = await crawlFrameworkPkgs({\n root: process.cwd(),\n isBuild: command === 'build',\n isFrameworkPkgByJson(pkgJson) {\n if ([routerPackageName, startPackageName].includes(pkgJson.name)) {\n return false\n }\n\n const peerDependencies = pkgJson['peerDependencies']\n\n if (peerDependencies) {\n const internalResult = corePluginOpts.crawlPackages?.({\n name: pkgJson.name,\n peerDependencies,\n exports: pkgJson.exports,\n })\n if (internalResult) {\n if (internalResult === 'exclude') {\n additionalOptimizeDeps.exclude.add(pkgJson.name)\n } else {\n additionalOptimizeDeps.include.add(pkgJson.name)\n }\n }\n return (\n startPackageName in peerDependencies ||\n routerPackageName in peerDependencies\n )\n }\n return false\n },\n })\n\n return {\n base: viteAppBase,\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 },\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 ?? ENTRY_POINTS.server,\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 exclude: [\n ...Object.values(VIRTUAL_MODULES),\n ...result.optimizeDeps.exclude.sort(),\n ...additionalOptimizeDeps.exclude,\n `@tanstack/${corePluginOpts.framework}-start/server`,\n ],\n include: [\n ...additionalOptimizeDeps.include,\n ...result.optimizeDeps.include.sort(),\n ],\n },\n },\n },\n resolve: {\n noExternal: [\n '@tanstack/start**',\n `@tanstack/${corePluginOpts.framework}-start**`,\n ...Object.values(VIRTUAL_MODULES),\n startPackageName,\n ...result.ssr.noExternal.sort(),\n ],\n dedupe: [startPackageName],\n alias: {\n ...entryAliasConfiguration,\n },\n },\n optimizeDeps: {\n exclude: [\n ...Object.values(VIRTUAL_MODULES),\n startPackageName,\n ...result.optimizeDeps.exclude.sort(),\n ...additionalOptimizeDeps.exclude,\n ],\n include: [...additionalOptimizeDeps.include],\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', startConfig.serverFns.base),\n ...defineReplaceEnv('TSS_CLIENT_OUTPUT_DIR', getClientOutputDirectory(viteConfig)),\n ...defineReplaceEnv('TSS_APP_BASE', viteAppBase),\n ...(command === 'serve' ? defineReplaceEnv('TSS_SHELL', startConfig.spa?.enabled ? 'true' : 'false') : {}),\n ...defineReplaceEnv('TSS_DEV_SERVER', command === 'serve' ? 'true' : 'false'),\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 const serverBundle = getBundle(VITE_ENVIRONMENT_NAMES.server)\n await postServerBuild({ builder, startConfig, serverBundle })\n },\n },\n }\n },\n },\n // N.B. TanStackStartCompilerPlugin must be before the TanStackServerFnPluginEnv\n startCompilerPlugin(corePluginOpts.framework, {\n client: { envName: VITE_ENVIRONMENT_NAMES.client },\n server: { envName: VITE_ENVIRONMENT_NAMES.server },\n }),\n TanStackServerFnPluginEnv({\n // This is the ID that will be available to look up and import\n // our server function manifest and resolve its module\n manifestVirtualImportId: VIRTUAL_MODULES.serverFnManifest,\n client: {\n getRuntimeCode: () =>\n `import { createClientRpc } from '@tanstack/${corePluginOpts.framework}-start/client'`,\n replacer: (d) => `createClientRpc('${d.functionId}')`,\n envName: VITE_ENVIRONMENT_NAMES.client,\n },\n server: {\n getRuntimeCode: () =>\n `import { createServerRpc } from '@tanstack/${corePluginOpts.framework}-start/server'`,\n replacer: (d) => `createServerRpc('${d.functionId}', ${d.fn})`,\n envName: VITE_ENVIRONMENT_NAMES.server,\n },\n }),\n loadEnvPlugin(),\n startManifestPlugin({\n getClientBundle: () => getBundle(VITE_ENVIRONMENT_NAMES.client),\n }),\n devServerPlugin({ startConfig }),\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":[],"mappings":"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"}
|
package/dist/esm/schema.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare function parseStartConfig(opts?: z.input<typeof tanstackStartOptionsSchema>): {
|
|
3
|
-
|
|
3
|
+
router: {
|
|
4
4
|
target: "react" | "solid";
|
|
5
5
|
routeFileIgnorePrefix: string;
|
|
6
6
|
routesDirectory: string;
|
|
@@ -30,11 +30,9 @@ export declare function parseStartConfig(opts?: z.input<typeof tanstackStartOpti
|
|
|
30
30
|
enableCodeSplitting?: boolean | undefined;
|
|
31
31
|
} | undefined;
|
|
32
32
|
plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined;
|
|
33
|
-
srcDirectory: string;
|
|
34
|
-
};
|
|
35
|
-
router: {
|
|
36
33
|
entry?: string | undefined;
|
|
37
34
|
};
|
|
35
|
+
srcDirectory: string;
|
|
38
36
|
client: {
|
|
39
37
|
base: string;
|
|
40
38
|
entry?: string | undefined;
|
|
@@ -816,7 +814,14 @@ declare const pageSchema: z.ZodObject<{
|
|
|
816
814
|
} | undefined;
|
|
817
815
|
}>;
|
|
818
816
|
declare const tanstackStartOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
819
|
-
|
|
817
|
+
srcDirectory: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
818
|
+
router: z.ZodDefault<z.ZodOptional<z.ZodIntersection<z.ZodObject<{
|
|
819
|
+
entry: z.ZodOptional<z.ZodString>;
|
|
820
|
+
}, "strip", z.ZodTypeAny, {
|
|
821
|
+
entry?: string | undefined;
|
|
822
|
+
}, {
|
|
823
|
+
entry?: string | undefined;
|
|
824
|
+
}>, z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
820
825
|
target: z.ZodOptional<z.ZodDefault<z.ZodOptional<z.ZodEnum<["react", "solid"]>>>>;
|
|
821
826
|
virtualRouteConfig: z.ZodOptional<z.ZodOptional<z.ZodUnion<[z.ZodType<import('@tanstack/virtual-file-routes').VirtualRootRoute, z.ZodTypeDef, import('@tanstack/virtual-file-routes').VirtualRootRoute>, z.ZodString]>>>;
|
|
822
827
|
routeFilePrefix: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
@@ -855,10 +860,7 @@ declare const tanstackStartOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodObject
|
|
|
855
860
|
}>>>;
|
|
856
861
|
plugins: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodType<import('@tanstack/router-generator').GeneratorPlugin, z.ZodTypeDef, import('@tanstack/router-generator').GeneratorPlugin>, "many">>>;
|
|
857
862
|
tmpDir: z.ZodOptional<z.ZodDefault<z.ZodOptional<z.ZodString>>>;
|
|
858
|
-
} & {
|
|
859
|
-
srcDirectory: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
860
863
|
}, "strip", z.ZodTypeAny, {
|
|
861
|
-
srcDirectory: string;
|
|
862
864
|
target?: "react" | "solid" | undefined;
|
|
863
865
|
virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
|
|
864
866
|
routeFilePrefix?: string | undefined;
|
|
@@ -916,15 +918,7 @@ declare const tanstackStartOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodObject
|
|
|
916
918
|
} | undefined;
|
|
917
919
|
plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined;
|
|
918
920
|
tmpDir?: string | undefined;
|
|
919
|
-
|
|
920
|
-
}>>>;
|
|
921
|
-
router: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
922
|
-
entry: z.ZodOptional<z.ZodString>;
|
|
923
|
-
}, "strip", z.ZodTypeAny, {
|
|
924
|
-
entry?: string | undefined;
|
|
925
|
-
}, {
|
|
926
|
-
entry?: string | undefined;
|
|
927
|
-
}>>>;
|
|
921
|
+
}>>>>>>;
|
|
928
922
|
client: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
929
923
|
entry: z.ZodOptional<z.ZodString>;
|
|
930
924
|
base: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
@@ -2972,8 +2966,10 @@ declare const tanstackStartOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodObject
|
|
|
2972
2966
|
installDevServerMiddleware?: boolean | undefined;
|
|
2973
2967
|
}>>;
|
|
2974
2968
|
}, "strip", z.ZodTypeAny, {
|
|
2975
|
-
|
|
2976
|
-
|
|
2969
|
+
srcDirectory: string;
|
|
2970
|
+
router: {
|
|
2971
|
+
entry?: string | undefined;
|
|
2972
|
+
} & {
|
|
2977
2973
|
target?: "react" | "solid" | undefined;
|
|
2978
2974
|
virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
|
|
2979
2975
|
routeFilePrefix?: string | undefined;
|
|
@@ -3003,9 +2999,6 @@ declare const tanstackStartOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodObject
|
|
|
3003
2999
|
plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined;
|
|
3004
3000
|
tmpDir?: string | undefined;
|
|
3005
3001
|
};
|
|
3006
|
-
router: {
|
|
3007
|
-
entry?: string | undefined;
|
|
3008
|
-
};
|
|
3009
3002
|
client: {
|
|
3010
3003
|
base: string;
|
|
3011
3004
|
entry?: string | undefined;
|
|
@@ -3247,7 +3240,10 @@ declare const tanstackStartOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodObject
|
|
|
3247
3240
|
installDevServerMiddleware?: boolean | undefined;
|
|
3248
3241
|
} | undefined;
|
|
3249
3242
|
}, {
|
|
3250
|
-
|
|
3243
|
+
srcDirectory?: string | undefined;
|
|
3244
|
+
router?: ({
|
|
3245
|
+
entry?: string | undefined;
|
|
3246
|
+
} & {
|
|
3251
3247
|
target?: "react" | "solid" | undefined;
|
|
3252
3248
|
virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
|
|
3253
3249
|
routeFilePrefix?: string | undefined;
|
|
@@ -3276,11 +3272,7 @@ declare const tanstackStartOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodObject
|
|
|
3276
3272
|
} | undefined;
|
|
3277
3273
|
plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined;
|
|
3278
3274
|
tmpDir?: string | undefined;
|
|
3279
|
-
|
|
3280
|
-
} | undefined;
|
|
3281
|
-
router?: {
|
|
3282
|
-
entry?: string | undefined;
|
|
3283
|
-
} | undefined;
|
|
3275
|
+
}) | undefined;
|
|
3284
3276
|
client?: {
|
|
3285
3277
|
entry?: string | undefined;
|
|
3286
3278
|
base?: string | undefined;
|
package/dist/esm/schema.js
CHANGED
|
@@ -1,22 +1,18 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { getConfig, configSchema } from "@tanstack/router-generator";
|
|
4
|
-
const tsrConfig = configSchema.omit({ autoCodeSplitting: true }).partial()
|
|
5
|
-
// this is relative to vite root
|
|
6
|
-
// TODO why is this nested under tsr?
|
|
7
|
-
srcDirectory: z.string().optional().default("src")
|
|
8
|
-
});
|
|
4
|
+
const tsrConfig = configSchema.omit({ autoCodeSplitting: true }).partial();
|
|
9
5
|
function parseStartConfig(opts) {
|
|
10
6
|
const options = tanstackStartOptionsSchema.parse(opts);
|
|
11
|
-
const srcDirectory = options.
|
|
12
|
-
const routesDirectory = options.
|
|
13
|
-
const generatedRouteTree = options.
|
|
7
|
+
const srcDirectory = options.srcDirectory;
|
|
8
|
+
const routesDirectory = options.router.routesDirectory ?? path.join(srcDirectory, "routes");
|
|
9
|
+
const generatedRouteTree = options.router.generatedRouteTree ?? path.join(srcDirectory, "routeTree.gen.ts");
|
|
14
10
|
return {
|
|
15
11
|
...options,
|
|
16
|
-
|
|
17
|
-
...options.
|
|
12
|
+
router: {
|
|
13
|
+
...options.router,
|
|
18
14
|
...getConfig({
|
|
19
|
-
...options.
|
|
15
|
+
...options.router,
|
|
20
16
|
routesDirectory,
|
|
21
17
|
generatedRouteTree
|
|
22
18
|
})
|
|
@@ -85,11 +81,11 @@ const pageSchema = pageBaseSchema.extend({
|
|
|
85
81
|
prerender: pagePrerenderOptionsSchema.optional()
|
|
86
82
|
});
|
|
87
83
|
const tanstackStartOptionsSchema = z.object({
|
|
88
|
-
|
|
84
|
+
srcDirectory: z.string().optional().default("src"),
|
|
89
85
|
router: z.object({
|
|
90
|
-
// TODO
|
|
86
|
+
// TODO this will move to 'start' once we have `createStart`
|
|
91
87
|
entry: z.string().optional()
|
|
92
|
-
}).optional().default({}),
|
|
88
|
+
}).and(tsrConfig.optional().default({})).optional().default({}),
|
|
93
89
|
client: z.object({
|
|
94
90
|
entry: z.string().optional(),
|
|
95
91
|
base: z.string().optional().default("/_build")
|
package/dist/esm/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sources":["../../src/schema.ts"],"sourcesContent":["import path from 'node:path'\nimport { z } from 'zod'\nimport { configSchema, getConfig } from '@tanstack/router-generator'\n\nconst tsrConfig = configSchema
|
|
1
|
+
{"version":3,"file":"schema.js","sources":["../../src/schema.ts"],"sourcesContent":["import path from 'node:path'\nimport { z } from 'zod'\nimport { configSchema, getConfig } from '@tanstack/router-generator'\n\nconst tsrConfig = configSchema.omit({ autoCodeSplitting: true }).partial()\n\nexport function parseStartConfig(\n opts?: z.input<typeof tanstackStartOptionsSchema>,\n) {\n const options = tanstackStartOptionsSchema.parse(opts)\n\n const srcDirectory = options.srcDirectory\n\n const routesDirectory =\n options.router.routesDirectory ?? path.join(srcDirectory, 'routes')\n\n const generatedRouteTree =\n options.router.generatedRouteTree ??\n path.join(srcDirectory, 'routeTree.gen.ts')\n\n return {\n ...options,\n router: {\n ...options.router,\n ...getConfig({\n ...options.router,\n routesDirectory,\n generatedRouteTree,\n }),\n },\n }\n}\n\nconst pageSitemapOptionsSchema = z.object({\n exclude: z.boolean().optional(),\n priority: z.number().min(0).max(1).optional(),\n changefreq: z\n .enum(['always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never'])\n .optional(),\n lastmod: z.union([z.string(), z.date()]).optional(),\n alternateRefs: z\n .array(\n z.object({\n href: z.string(),\n hreflang: z.string(),\n }),\n )\n .optional(),\n images: z\n .array(\n z.object({\n loc: z.string(),\n caption: z.string().optional(),\n title: z.string().optional(),\n }),\n )\n .optional(),\n news: z\n .object({\n publication: z.object({\n name: z.string(),\n language: z.string(),\n }),\n publicationDate: z.union([z.string(), z.date()]),\n title: z.string(),\n })\n .optional(),\n})\n\nconst pageBaseSchema = z.object({\n path: z.string(),\n sitemap: pageSitemapOptionsSchema.optional(),\n fromCrawl: z.boolean().optional(),\n})\n\nconst pagePrerenderOptionsSchema = z.object({\n enabled: z.boolean().optional(),\n outputPath: z.string().optional(),\n autoSubfolderIndex: z.boolean().optional(),\n crawlLinks: z.boolean().optional(),\n retryCount: z.number().optional(),\n retryDelay: z.number().optional(),\n onSuccess: z\n .function()\n .args(\n z.object({\n page: pageBaseSchema,\n html: z.string(),\n }),\n )\n .returns(z.any())\n .optional(),\n headers: z.record(z.string(), z.string()).optional(),\n})\n\nconst spaSchema = z.object({\n enabled: z.boolean().optional().default(true),\n maskPath: z.string().optional().default('/'),\n prerender: pagePrerenderOptionsSchema\n .optional()\n .default({})\n .transform((opts) => ({\n outputPath: opts.outputPath ?? '/_shell',\n crawlLinks: false,\n retryCount: 0,\n ...opts,\n enabled: true,\n })),\n})\n\nconst pageSchema = pageBaseSchema.extend({\n prerender: pagePrerenderOptionsSchema.optional(),\n})\n\nconst tanstackStartOptionsSchema = z\n .object({\n srcDirectory: z.string().optional().default('src'),\n router: z\n .object({\n // TODO this will move to 'start' once we have `createStart`\n entry: z.string().optional(),\n })\n .and(tsrConfig.optional().default({}))\n .optional()\n .default({}),\n client: z\n .object({\n entry: z.string().optional(),\n base: z.string().optional().default('/_build'),\n })\n .optional()\n .default({}),\n server: z\n .object({\n entry: z.string().optional(),\n })\n .optional()\n .default({}),\n serverFns: z\n .object({\n base: z.string().optional().default('/_serverFn'),\n })\n .optional()\n .default({}),\n public: z\n .object({\n dir: z.string().optional().default('public'),\n base: z.string().optional().default('/'),\n })\n .optional()\n .default({}),\n pages: z.array(pageSchema).optional().default([]),\n sitemap: z\n .object({\n enabled: z.boolean().optional().default(true),\n host: z.string().optional(),\n outputPath: z.string().optional().default('sitemap.xml'),\n })\n .optional(),\n prerender: z\n .object({\n enabled: z.boolean().optional(),\n concurrency: z.number().optional(),\n filter: z.function().args(pageSchema).returns(z.any()).optional(),\n failOnError: z.boolean().optional(),\n })\n .and(pagePrerenderOptionsSchema.optional())\n .optional(),\n spa: spaSchema.optional(),\n vite: z\n .object({ installDevServerMiddleware: z.boolean().optional() })\n .optional(),\n })\n .optional()\n .default({})\n\nexport type Page = z.infer<typeof pageSchema>\n\nexport type TanStackStartInputConfig = z.input<\n typeof tanstackStartOptionsSchema\n>\nexport type TanStackStartOutputConfig = ReturnType<typeof parseStartConfig>\n"],"names":[],"mappings":";;;AAIA,MAAM,YAAY,aAAa,KAAK,EAAE,mBAAmB,KAAA,CAAM,EAAE,QAAA;AAE1D,SAAS,iBACd,MACA;AACA,QAAM,UAAU,2BAA2B,MAAM,IAAI;AAErD,QAAM,eAAe,QAAQ;AAE7B,QAAM,kBACJ,QAAQ,OAAO,mBAAmB,KAAK,KAAK,cAAc,QAAQ;AAEpE,QAAM,qBACJ,QAAQ,OAAO,sBACf,KAAK,KAAK,cAAc,kBAAkB;AAE5C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,MACN,GAAG,QAAQ;AAAA,MACX,GAAG,UAAU;AAAA,QACX,GAAG,QAAQ;AAAA,QACX;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EACH;AAEJ;AAEA,MAAM,2BAA2B,EAAE,OAAO;AAAA,EACxC,SAAS,EAAE,QAAA,EAAU,SAAA;AAAA,EACrB,UAAU,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAA;AAAA,EACnC,YAAY,EACT,KAAK,CAAC,UAAU,UAAU,SAAS,UAAU,WAAW,UAAU,OAAO,CAAC,EAC1E,SAAA;AAAA,EACH,SAAS,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,KAAA,CAAM,CAAC,EAAE,SAAA;AAAA,EACzC,eAAe,EACZ;AAAA,IACC,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,OAAA;AAAA,MACR,UAAU,EAAE,OAAA;AAAA,IAAO,CACpB;AAAA,EAAA,EAEF,SAAA;AAAA,EACH,QAAQ,EACL;AAAA,IACC,EAAE,OAAO;AAAA,MACP,KAAK,EAAE,OAAA;AAAA,MACP,SAAS,EAAE,OAAA,EAAS,SAAA;AAAA,MACpB,OAAO,EAAE,OAAA,EAAS,SAAA;AAAA,IAAS,CAC5B;AAAA,EAAA,EAEF,SAAA;AAAA,EACH,MAAM,EACH,OAAO;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,MAAM,EAAE,OAAA;AAAA,MACR,UAAU,EAAE,OAAA;AAAA,IAAO,CACpB;AAAA,IACD,iBAAiB,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,KAAA,CAAM,CAAC;AAAA,IAC/C,OAAO,EAAE,OAAA;AAAA,EAAO,CACjB,EACA,SAAA;AACL,CAAC;AAED,MAAM,iBAAiB,EAAE,OAAO;AAAA,EAC9B,MAAM,EAAE,OAAA;AAAA,EACR,SAAS,yBAAyB,SAAA;AAAA,EAClC,WAAW,EAAE,QAAA,EAAU,SAAA;AACzB,CAAC;AAED,MAAM,6BAA6B,EAAE,OAAO;AAAA,EAC1C,SAAS,EAAE,QAAA,EAAU,SAAA;AAAA,EACrB,YAAY,EAAE,OAAA,EAAS,SAAA;AAAA,EACvB,oBAAoB,EAAE,QAAA,EAAU,SAAA;AAAA,EAChC,YAAY,EAAE,QAAA,EAAU,SAAA;AAAA,EACxB,YAAY,EAAE,OAAA,EAAS,SAAA;AAAA,EACvB,YAAY,EAAE,OAAA,EAAS,SAAA;AAAA,EACvB,WAAW,EACR,SAAA,EACA;AAAA,IACC,EAAE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM,EAAE,OAAA;AAAA,IAAO,CAChB;AAAA,EAAA,EAEF,QAAQ,EAAE,IAAA,CAAK,EACf,SAAA;AAAA,EACH,SAAS,EAAE,OAAO,EAAE,OAAA,GAAU,EAAE,OAAA,CAAQ,EAAE,SAAA;AAC5C,CAAC;AAED,MAAM,YAAY,EAAE,OAAO;AAAA,EACzB,SAAS,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,IAAI;AAAA,EAC5C,UAAU,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,GAAG;AAAA,EAC3C,WAAW,2BACR,WACA,QAAQ,CAAA,CAAE,EACV,UAAU,CAAC,UAAU;AAAA,IACpB,YAAY,KAAK,cAAc;AAAA,IAC/B,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,GAAG;AAAA,IACH,SAAS;AAAA,EAAA,EACT;AACN,CAAC;AAED,MAAM,aAAa,eAAe,OAAO;AAAA,EACvC,WAAW,2BAA2B,SAAA;AACxC,CAAC;AAED,MAAM,6BAA6B,EAChC,OAAO;AAAA,EACN,cAAc,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,KAAK;AAAA,EACjD,QAAQ,EACL,OAAO;AAAA;AAAA,IAEN,OAAO,EAAE,OAAA,EAAS,SAAA;AAAA,EAAS,CAC5B,EACA,IAAI,UAAU,WAAW,QAAQ,CAAA,CAAE,CAAC,EACpC,WACA,QAAQ,CAAA,CAAE;AAAA,EACb,QAAQ,EACL,OAAO;AAAA,IACN,OAAO,EAAE,OAAA,EAAS,SAAA;AAAA,IAClB,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,SAAS;AAAA,EAAA,CAC9C,EACA,SAAA,EACA,QAAQ,EAAE;AAAA,EACb,QAAQ,EACL,OAAO;AAAA,IACN,OAAO,EAAE,OAAA,EAAS,SAAA;AAAA,EAAS,CAC5B,EACA,SAAA,EACA,QAAQ,EAAE;AAAA,EACb,WAAW,EACR,OAAO;AAAA,IACN,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,YAAY;AAAA,EAAA,CACjD,EACA,SAAA,EACA,QAAQ,EAAE;AAAA,EACb,QAAQ,EACL,OAAO;AAAA,IACN,KAAK,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,QAAQ;AAAA,IAC3C,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,GAAG;AAAA,EAAA,CACxC,EACA,SAAA,EACA,QAAQ,EAAE;AAAA,EACb,OAAO,EAAE,MAAM,UAAU,EAAE,SAAA,EAAW,QAAQ,EAAE;AAAA,EAChD,SAAS,EACN,OAAO;AAAA,IACN,SAAS,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,IAAI;AAAA,IAC5C,MAAM,EAAE,OAAA,EAAS,SAAA;AAAA,IACjB,YAAY,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,aAAa;AAAA,EAAA,CACxD,EACA,SAAA;AAAA,EACH,WAAW,EACR,OAAO;AAAA,IACN,SAAS,EAAE,QAAA,EAAU,SAAA;AAAA,IACrB,aAAa,EAAE,OAAA,EAAS,SAAA;AAAA,IACxB,QAAQ,EAAE,SAAA,EAAW,KAAK,UAAU,EAAE,QAAQ,EAAE,IAAA,CAAK,EAAE,SAAA;AAAA,IACvD,aAAa,EAAE,QAAA,EAAU,SAAA;AAAA,EAAS,CACnC,EACA,IAAI,2BAA2B,SAAA,CAAU,EACzC,SAAA;AAAA,EACH,KAAK,UAAU,SAAA;AAAA,EACf,MAAM,EACH,OAAO,EAAE,4BAA4B,EAAE,UAAU,WAAS,CAAG,EAC7D,SAAA;AACL,CAAC,EACA,SAAA,EACA,QAAQ,EAAE;"}
|
|
@@ -3,8 +3,6 @@ import * as babel from '@babel/core';
|
|
|
3
3
|
import * as t from '@babel/types';
|
|
4
4
|
export type CompileStartFrameworkOptions = 'react' | 'solid';
|
|
5
5
|
export declare function compileStartOutputFactory(framework: CompileStartFrameworkOptions): (opts: CompileOptions) => GeneratorResult;
|
|
6
|
-
export declare const handleServerOnlyCallExpression: (path: babel.NodePath<t.CallExpression>, opts: CompileOptions) => void;
|
|
7
|
-
export declare const handleClientOnlyCallExpression: (path: babel.NodePath<t.CallExpression>, opts: CompileOptions) => void;
|
|
8
6
|
export type CompileOptions = ParseAstOptions & {
|
|
9
7
|
env: 'server' | 'client';
|
|
10
8
|
dce?: boolean;
|
|
@@ -15,7 +13,3 @@ export type IdentifierConfig = {
|
|
|
15
13
|
handleCallExpression: (path: babel.NodePath<t.CallExpression>, opts: CompileOptions) => void;
|
|
16
14
|
paths: Array<babel.NodePath>;
|
|
17
15
|
};
|
|
18
|
-
export declare function handleCreateServerFnCallExpression(path: babel.NodePath<t.CallExpression>, opts: CompileOptions): void;
|
|
19
|
-
export declare function handleCreateMiddlewareCallExpression(path: babel.NodePath<t.CallExpression>, opts: CompileOptions): void;
|
|
20
|
-
export declare function handleCreateIsomorphicFnCallExpression(path: babel.NodePath<t.CallExpression>, opts: CompileOptions): void;
|
|
21
|
-
export declare function getRootCallExpression(path: babel.NodePath<t.CallExpression>): babel.NodePath<t.CallExpression>;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import * as babel from "@babel/core";
|
|
2
2
|
import * as t from "@babel/types";
|
|
3
|
-
import { codeFrameColumns } from "@babel/code-frame";
|
|
4
3
|
import { findReferencedIdentifiers, deadCodeElimination } from "babel-dead-code-elimination";
|
|
5
4
|
import { parseAst, generateFromAst } from "@tanstack/router-utils";
|
|
6
5
|
import { transformFuncs } from "./constants.js";
|
|
6
|
+
import { handleCreateServerFileRouteCallExpressionFactory } from "./serverFileRoute.js";
|
|
7
|
+
import { handleCreateIsomorphicFnCallExpression } from "./isomorphicFn.js";
|
|
8
|
+
import { handleCreateMiddlewareCallExpression } from "./middleware.js";
|
|
9
|
+
import { handleCreateServerFnCallExpression } from "./serverFn.js";
|
|
10
|
+
import { handleCreateClientOnlyFnCallExpression, handleCreateServerOnlyFnCallExpression } from "./envOnly.js";
|
|
7
11
|
const getIdentifiers = (framework) => ({
|
|
8
12
|
createServerRootRoute: {
|
|
9
13
|
name: "createServerRootRoute",
|
|
@@ -39,14 +43,14 @@ const getIdentifiers = (framework) => ({
|
|
|
39
43
|
handleCallExpression: handleCreateMiddlewareCallExpression,
|
|
40
44
|
paths: []
|
|
41
45
|
},
|
|
42
|
-
|
|
43
|
-
name: "
|
|
44
|
-
handleCallExpression:
|
|
46
|
+
createServerOnlyFn: {
|
|
47
|
+
name: "createServerOnlyFn",
|
|
48
|
+
handleCallExpression: handleCreateServerOnlyFnCallExpression,
|
|
45
49
|
paths: []
|
|
46
50
|
},
|
|
47
|
-
|
|
48
|
-
name: "
|
|
49
|
-
handleCallExpression:
|
|
51
|
+
createClientOnlyFn: {
|
|
52
|
+
name: "createClientOnlyFn",
|
|
53
|
+
handleCallExpression: handleCreateClientOnlyFnCallExpression,
|
|
50
54
|
paths: []
|
|
51
55
|
},
|
|
52
56
|
createIsomorphicFn: {
|
|
@@ -127,270 +131,7 @@ function compileStartOutputFactory(framework) {
|
|
|
127
131
|
});
|
|
128
132
|
};
|
|
129
133
|
}
|
|
130
|
-
function handleCreateServerFileRouteCallExpressionFactory(framework, method) {
|
|
131
|
-
return function handleCreateServerFileRouteCallExpression(path, opts) {
|
|
132
|
-
const PACKAGES = { start: `@tanstack/${framework}-start/server` };
|
|
133
|
-
let highestParent = path;
|
|
134
|
-
while (highestParent.parentPath && !highestParent.parentPath.isProgram()) {
|
|
135
|
-
highestParent = highestParent.parentPath;
|
|
136
|
-
}
|
|
137
|
-
const programPath = highestParent.parentPath;
|
|
138
|
-
if (opts.env === "client") {
|
|
139
|
-
highestParent.remove();
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
let isCreateServerFileRouteImported = false;
|
|
143
|
-
programPath.traverse({
|
|
144
|
-
ImportDeclaration(importPath) {
|
|
145
|
-
const importSource = importPath.node.source.value;
|
|
146
|
-
if (importSource === PACKAGES.start) {
|
|
147
|
-
const specifiers = importPath.node.specifiers;
|
|
148
|
-
isCreateServerFileRouteImported ||= specifiers.some((specifier) => {
|
|
149
|
-
return t.isImportSpecifier(specifier) && t.isIdentifier(specifier.imported) && specifier.imported.name === method;
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
if (!isCreateServerFileRouteImported) {
|
|
155
|
-
const importDeclaration = t.importDeclaration(
|
|
156
|
-
[t.importSpecifier(t.identifier(method), t.identifier(method))],
|
|
157
|
-
t.stringLiteral(PACKAGES.start)
|
|
158
|
-
);
|
|
159
|
-
programPath.node.body.unshift(importDeclaration);
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
const handleServerOnlyCallExpression = buildEnvOnlyCallExpressionHandler("server");
|
|
164
|
-
const handleClientOnlyCallExpression = buildEnvOnlyCallExpressionHandler("client");
|
|
165
|
-
function handleCreateServerFnCallExpression(path, opts) {
|
|
166
|
-
const calledOptions = path.node.arguments[0] ? path.get("arguments.0") : null;
|
|
167
|
-
const shouldValidateClient = !!calledOptions?.node.properties.find((prop) => {
|
|
168
|
-
return t.isObjectProperty(prop) && t.isIdentifier(prop.key) && prop.key.name === "validateClient" && t.isBooleanLiteral(prop.value) && prop.value.value === true;
|
|
169
|
-
});
|
|
170
|
-
const callExpressionPaths = {
|
|
171
|
-
middleware: null,
|
|
172
|
-
validator: null,
|
|
173
|
-
handler: null
|
|
174
|
-
};
|
|
175
|
-
const validMethods = Object.keys(callExpressionPaths);
|
|
176
|
-
const rootCallExpression = getRootCallExpression(path);
|
|
177
|
-
if (!rootCallExpression.parentPath.isVariableDeclarator()) {
|
|
178
|
-
throw new Error("createServerFn must be assigned to a variable!");
|
|
179
|
-
}
|
|
180
|
-
const variableDeclarator = rootCallExpression.parentPath.node;
|
|
181
|
-
const existingVariableName = variableDeclarator.id.name;
|
|
182
|
-
rootCallExpression.traverse({
|
|
183
|
-
MemberExpression(memberExpressionPath) {
|
|
184
|
-
if (t.isIdentifier(memberExpressionPath.node.property)) {
|
|
185
|
-
const name = memberExpressionPath.node.property.name;
|
|
186
|
-
if (validMethods.includes(name) && memberExpressionPath.parentPath.isCallExpression()) {
|
|
187
|
-
callExpressionPaths[name] = memberExpressionPath.parentPath;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
if (callExpressionPaths.validator) {
|
|
193
|
-
const innerInputExpression = callExpressionPaths.validator.node.arguments[0];
|
|
194
|
-
if (!innerInputExpression) {
|
|
195
|
-
throw new Error(
|
|
196
|
-
"createServerFn().validator() must be called with a validator!"
|
|
197
|
-
);
|
|
198
|
-
}
|
|
199
|
-
if (opts.env === "client" && !shouldValidateClient && t.isMemberExpression(callExpressionPaths.validator.node.callee)) {
|
|
200
|
-
callExpressionPaths.validator.replaceWith(
|
|
201
|
-
callExpressionPaths.validator.node.callee.object
|
|
202
|
-
);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
const handlerFnPath = callExpressionPaths.handler?.get(
|
|
206
|
-
"arguments.0"
|
|
207
|
-
);
|
|
208
|
-
if (!callExpressionPaths.handler || !handlerFnPath.node) {
|
|
209
|
-
throw codeFrameError(
|
|
210
|
-
opts.code,
|
|
211
|
-
path.node.callee.loc,
|
|
212
|
-
`createServerFn must be called with a "handler" property!`
|
|
213
|
-
);
|
|
214
|
-
}
|
|
215
|
-
const handlerFn = handlerFnPath.node;
|
|
216
|
-
if (t.isIdentifier(handlerFn)) {
|
|
217
|
-
if (opts.env === "client") {
|
|
218
|
-
const binding = handlerFnPath.scope.getBinding(handlerFn.name);
|
|
219
|
-
if (binding) {
|
|
220
|
-
binding.path.remove();
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
handlerFnPath.replaceWith(
|
|
225
|
-
t.arrowFunctionExpression(
|
|
226
|
-
[t.identifier("opts"), t.identifier("signal")],
|
|
227
|
-
t.blockStatement(
|
|
228
|
-
// Everything in here is server-only, since the client
|
|
229
|
-
// will strip out anything in the 'use server' directive.
|
|
230
|
-
[
|
|
231
|
-
t.returnStatement(
|
|
232
|
-
t.callExpression(
|
|
233
|
-
t.identifier(`${existingVariableName}.__executeServer`),
|
|
234
|
-
[t.identifier("opts"), t.identifier("signal")]
|
|
235
|
-
)
|
|
236
|
-
)
|
|
237
|
-
],
|
|
238
|
-
[t.directive(t.directiveLiteral("use server"))]
|
|
239
|
-
)
|
|
240
|
-
)
|
|
241
|
-
);
|
|
242
|
-
if (opts.env === "server") {
|
|
243
|
-
callExpressionPaths.handler.node.arguments.push(handlerFn);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
function handleCreateMiddlewareCallExpression(path, opts) {
|
|
247
|
-
const rootCallExpression = getRootCallExpression(path);
|
|
248
|
-
const callExpressionPaths = {
|
|
249
|
-
middleware: null,
|
|
250
|
-
validator: null,
|
|
251
|
-
client: null,
|
|
252
|
-
server: null
|
|
253
|
-
};
|
|
254
|
-
const validMethods = Object.keys(callExpressionPaths);
|
|
255
|
-
rootCallExpression.traverse({
|
|
256
|
-
MemberExpression(memberExpressionPath) {
|
|
257
|
-
if (t.isIdentifier(memberExpressionPath.node.property)) {
|
|
258
|
-
const name = memberExpressionPath.node.property.name;
|
|
259
|
-
if (validMethods.includes(name) && memberExpressionPath.parentPath.isCallExpression()) {
|
|
260
|
-
callExpressionPaths[name] = memberExpressionPath.parentPath;
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
});
|
|
265
|
-
if (callExpressionPaths.validator) {
|
|
266
|
-
const innerInputExpression = callExpressionPaths.validator.node.arguments[0];
|
|
267
|
-
if (!innerInputExpression) {
|
|
268
|
-
throw new Error(
|
|
269
|
-
"createMiddleware().validator() must be called with a validator!"
|
|
270
|
-
);
|
|
271
|
-
}
|
|
272
|
-
if (opts.env === "client") {
|
|
273
|
-
if (t.isMemberExpression(callExpressionPaths.validator.node.callee)) {
|
|
274
|
-
callExpressionPaths.validator.replaceWith(
|
|
275
|
-
callExpressionPaths.validator.node.callee.object
|
|
276
|
-
);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
const serverFnPath = callExpressionPaths.server?.get(
|
|
281
|
-
"arguments.0"
|
|
282
|
-
);
|
|
283
|
-
if (callExpressionPaths.server && serverFnPath.node && opts.env === "client") {
|
|
284
|
-
if (t.isMemberExpression(callExpressionPaths.server.node.callee)) {
|
|
285
|
-
callExpressionPaths.server.replaceWith(
|
|
286
|
-
callExpressionPaths.server.node.callee.object
|
|
287
|
-
);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
function buildEnvOnlyCallExpressionHandler(env) {
|
|
292
|
-
return function envOnlyCallExpressionHandler(path, opts) {
|
|
293
|
-
const isEnvMatch = env === "client" ? opts.env === "client" : opts.env === "server";
|
|
294
|
-
if (isEnvMatch) {
|
|
295
|
-
const innerInputExpression = path.node.arguments[0];
|
|
296
|
-
if (!t.isExpression(innerInputExpression)) {
|
|
297
|
-
throw new Error(
|
|
298
|
-
`${env}Only() functions must be called with a function!`
|
|
299
|
-
);
|
|
300
|
-
}
|
|
301
|
-
path.replaceWith(innerInputExpression);
|
|
302
|
-
return;
|
|
303
|
-
}
|
|
304
|
-
path.replaceWith(
|
|
305
|
-
t.arrowFunctionExpression(
|
|
306
|
-
[],
|
|
307
|
-
t.blockStatement([
|
|
308
|
-
t.throwStatement(
|
|
309
|
-
t.newExpression(t.identifier("Error"), [
|
|
310
|
-
t.stringLiteral(
|
|
311
|
-
`${env}Only() functions can only be called on the ${env}!`
|
|
312
|
-
)
|
|
313
|
-
])
|
|
314
|
-
)
|
|
315
|
-
])
|
|
316
|
-
)
|
|
317
|
-
);
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
function handleCreateIsomorphicFnCallExpression(path, opts) {
|
|
321
|
-
const rootCallExpression = getRootCallExpression(path);
|
|
322
|
-
const callExpressionPaths = {
|
|
323
|
-
client: null,
|
|
324
|
-
server: null
|
|
325
|
-
};
|
|
326
|
-
const validMethods = Object.keys(callExpressionPaths);
|
|
327
|
-
rootCallExpression.traverse({
|
|
328
|
-
MemberExpression(memberExpressionPath) {
|
|
329
|
-
if (t.isIdentifier(memberExpressionPath.node.property)) {
|
|
330
|
-
const name = memberExpressionPath.node.property.name;
|
|
331
|
-
if (validMethods.includes(name) && memberExpressionPath.parentPath.isCallExpression()) {
|
|
332
|
-
callExpressionPaths[name] = memberExpressionPath.parentPath;
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
});
|
|
337
|
-
if (validMethods.every(
|
|
338
|
-
(method) => !callExpressionPaths[method]
|
|
339
|
-
)) {
|
|
340
|
-
const variableId = rootCallExpression.parentPath.isVariableDeclarator() ? rootCallExpression.parentPath.node.id : null;
|
|
341
|
-
console.warn(
|
|
342
|
-
"createIsomorphicFn called without a client or server implementation!",
|
|
343
|
-
"This will result in a no-op function.",
|
|
344
|
-
"Variable name:",
|
|
345
|
-
t.isIdentifier(variableId) ? variableId.name : "unknown"
|
|
346
|
-
);
|
|
347
|
-
}
|
|
348
|
-
const envCallExpression = callExpressionPaths[opts.env];
|
|
349
|
-
if (!envCallExpression) {
|
|
350
|
-
rootCallExpression.replaceWith(
|
|
351
|
-
t.arrowFunctionExpression([], t.blockStatement([]))
|
|
352
|
-
);
|
|
353
|
-
return;
|
|
354
|
-
}
|
|
355
|
-
const innerInputExpression = envCallExpression.node.arguments[0];
|
|
356
|
-
if (!t.isExpression(innerInputExpression)) {
|
|
357
|
-
throw new Error(
|
|
358
|
-
`createIsomorphicFn().${opts.env}(func) must be called with a function!`
|
|
359
|
-
);
|
|
360
|
-
}
|
|
361
|
-
rootCallExpression.replaceWith(innerInputExpression);
|
|
362
|
-
}
|
|
363
|
-
function getRootCallExpression(path) {
|
|
364
|
-
let rootCallExpression = path;
|
|
365
|
-
while (rootCallExpression.parentPath.isMemberExpression()) {
|
|
366
|
-
const parent = rootCallExpression.parentPath;
|
|
367
|
-
if (parent.parentPath.isCallExpression()) {
|
|
368
|
-
rootCallExpression = parent.parentPath;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
return rootCallExpression;
|
|
372
|
-
}
|
|
373
|
-
function codeFrameError(code, loc, message) {
|
|
374
|
-
const frame = codeFrameColumns(
|
|
375
|
-
code,
|
|
376
|
-
{
|
|
377
|
-
start: loc.start,
|
|
378
|
-
end: loc.end
|
|
379
|
-
},
|
|
380
|
-
{
|
|
381
|
-
highlightCode: true,
|
|
382
|
-
message
|
|
383
|
-
}
|
|
384
|
-
);
|
|
385
|
-
return new Error(frame);
|
|
386
|
-
}
|
|
387
134
|
export {
|
|
388
|
-
compileStartOutputFactory
|
|
389
|
-
getRootCallExpression,
|
|
390
|
-
handleClientOnlyCallExpression,
|
|
391
|
-
handleCreateIsomorphicFnCallExpression,
|
|
392
|
-
handleCreateMiddlewareCallExpression,
|
|
393
|
-
handleCreateServerFnCallExpression,
|
|
394
|
-
handleServerOnlyCallExpression
|
|
135
|
+
compileStartOutputFactory
|
|
395
136
|
};
|
|
396
137
|
//# sourceMappingURL=compilers.js.map
|