@tanstack/start-plugin-core 1.20.3-alpha.1

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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -0
  3. package/dist/cjs/compilers.cjs +402 -0
  4. package/dist/cjs/compilers.cjs.map +1 -0
  5. package/dist/cjs/compilers.d.cts +21 -0
  6. package/dist/cjs/extractHtmlScripts.cjs +35 -0
  7. package/dist/cjs/extractHtmlScripts.cjs.map +1 -0
  8. package/dist/cjs/extractHtmlScripts.d.cts +4 -0
  9. package/dist/cjs/index.cjs +15 -0
  10. package/dist/cjs/index.cjs.map +1 -0
  11. package/dist/cjs/index.d.cts +7 -0
  12. package/dist/cjs/nitro/build-nitro.cjs +18 -0
  13. package/dist/cjs/nitro/build-nitro.cjs.map +1 -0
  14. package/dist/cjs/nitro/build-nitro.d.cts +2 -0
  15. package/dist/cjs/nitro/build-sitemap.cjs +54 -0
  16. package/dist/cjs/nitro/build-sitemap.cjs.map +1 -0
  17. package/dist/cjs/nitro/build-sitemap.d.cts +9 -0
  18. package/dist/cjs/nitro/dev-server-plugin.cjs +128 -0
  19. package/dist/cjs/nitro/dev-server-plugin.cjs.map +1 -0
  20. package/dist/cjs/nitro/dev-server-plugin.d.cts +5 -0
  21. package/dist/cjs/nitro/nitro-plugin.cjs +128 -0
  22. package/dist/cjs/nitro/nitro-plugin.cjs.map +1 -0
  23. package/dist/cjs/nitro/nitro-plugin.d.cts +3 -0
  24. package/dist/cjs/plugin.cjs +117 -0
  25. package/dist/cjs/plugin.cjs.map +1 -0
  26. package/dist/cjs/plugin.d.cts +2713 -0
  27. package/dist/cjs/prerender.cjs +171 -0
  28. package/dist/cjs/prerender.cjs.map +1 -0
  29. package/dist/cjs/prerender.d.cts +8 -0
  30. package/dist/cjs/queue.cjs +131 -0
  31. package/dist/cjs/queue.cjs.map +1 -0
  32. package/dist/cjs/queue.d.cts +32 -0
  33. package/dist/cjs/routesManifestPlugin.cjs +165 -0
  34. package/dist/cjs/routesManifestPlugin.cjs.map +1 -0
  35. package/dist/cjs/routesManifestPlugin.d.cts +3 -0
  36. package/dist/cjs/schema.cjs +136 -0
  37. package/dist/cjs/schema.cjs.map +1 -0
  38. package/dist/cjs/schema.d.cts +8128 -0
  39. package/dist/cjs/start-compiler-plugin.cjs +72 -0
  40. package/dist/cjs/start-compiler-plugin.cjs.map +1 -0
  41. package/dist/cjs/start-compiler-plugin.d.cts +13 -0
  42. package/dist/cjs/start-server-routes-plugin/config.d.cts +49 -0
  43. package/dist/cjs/start-server-routes-plugin/plugin.cjs +608 -0
  44. package/dist/cjs/start-server-routes-plugin/plugin.cjs.map +1 -0
  45. package/dist/cjs/start-server-routes-plugin/plugin.d.cts +3 -0
  46. package/dist/cjs/start-server-routes-plugin/template.cjs +111 -0
  47. package/dist/cjs/start-server-routes-plugin/template.cjs.map +1 -0
  48. package/dist/cjs/start-server-routes-plugin/template.d.cts +34 -0
  49. package/dist/esm/compilers.d.ts +21 -0
  50. package/dist/esm/compilers.js +384 -0
  51. package/dist/esm/compilers.js.map +1 -0
  52. package/dist/esm/extractHtmlScripts.d.ts +4 -0
  53. package/dist/esm/extractHtmlScripts.js +18 -0
  54. package/dist/esm/extractHtmlScripts.js.map +1 -0
  55. package/dist/esm/index.d.ts +7 -0
  56. package/dist/esm/index.js +15 -0
  57. package/dist/esm/index.js.map +1 -0
  58. package/dist/esm/nitro/build-nitro.d.ts +2 -0
  59. package/dist/esm/nitro/build-nitro.js +18 -0
  60. package/dist/esm/nitro/build-nitro.js.map +1 -0
  61. package/dist/esm/nitro/build-sitemap.d.ts +9 -0
  62. package/dist/esm/nitro/build-sitemap.js +54 -0
  63. package/dist/esm/nitro/build-sitemap.js.map +1 -0
  64. package/dist/esm/nitro/dev-server-plugin.d.ts +5 -0
  65. package/dist/esm/nitro/dev-server-plugin.js +128 -0
  66. package/dist/esm/nitro/dev-server-plugin.js.map +1 -0
  67. package/dist/esm/nitro/nitro-plugin.d.ts +3 -0
  68. package/dist/esm/nitro/nitro-plugin.js +128 -0
  69. package/dist/esm/nitro/nitro-plugin.js.map +1 -0
  70. package/dist/esm/plugin.d.ts +2713 -0
  71. package/dist/esm/plugin.js +117 -0
  72. package/dist/esm/plugin.js.map +1 -0
  73. package/dist/esm/prerender.d.ts +8 -0
  74. package/dist/esm/prerender.js +171 -0
  75. package/dist/esm/prerender.js.map +1 -0
  76. package/dist/esm/queue.d.ts +32 -0
  77. package/dist/esm/queue.js +131 -0
  78. package/dist/esm/queue.js.map +1 -0
  79. package/dist/esm/routesManifestPlugin.d.ts +3 -0
  80. package/dist/esm/routesManifestPlugin.js +165 -0
  81. package/dist/esm/routesManifestPlugin.js.map +1 -0
  82. package/dist/esm/schema.d.ts +8128 -0
  83. package/dist/esm/schema.js +136 -0
  84. package/dist/esm/schema.js.map +1 -0
  85. package/dist/esm/start-compiler-plugin.d.ts +13 -0
  86. package/dist/esm/start-compiler-plugin.js +72 -0
  87. package/dist/esm/start-compiler-plugin.js.map +1 -0
  88. package/dist/esm/start-server-routes-plugin/config.d.ts +49 -0
  89. package/dist/esm/start-server-routes-plugin/plugin.d.ts +3 -0
  90. package/dist/esm/start-server-routes-plugin/plugin.js +608 -0
  91. package/dist/esm/start-server-routes-plugin/plugin.js.map +1 -0
  92. package/dist/esm/start-server-routes-plugin/template.d.ts +34 -0
  93. package/dist/esm/start-server-routes-plugin/template.js +111 -0
  94. package/dist/esm/start-server-routes-plugin/template.js.map +1 -0
  95. package/package.json +72 -0
  96. package/src/compilers.ts +759 -0
  97. package/src/extractHtmlScripts.ts +19 -0
  98. package/src/index.ts +15 -0
  99. package/src/nitro/build-nitro.ts +27 -0
  100. package/src/nitro/build-sitemap.ts +79 -0
  101. package/src/nitro/dev-server-plugin.ts +159 -0
  102. package/src/nitro/nitro-plugin.ts +161 -0
  103. package/src/plugin.ts +145 -0
  104. package/src/prerender.ts +245 -0
  105. package/src/queue.ts +153 -0
  106. package/src/routesManifestPlugin.ts +216 -0
  107. package/src/schema.ts +193 -0
  108. package/src/start-compiler-plugin.ts +111 -0
  109. package/src/start-server-routes-plugin/config.ts +8 -0
  110. package/src/start-server-routes-plugin/plugin.ts +890 -0
  111. package/src/start-server-routes-plugin/template.ts +164 -0
package/src/schema.ts ADDED
@@ -0,0 +1,193 @@
1
+ import path from 'node:path'
2
+ import { existsSync } from 'node:fs'
3
+ import { z } from 'zod'
4
+ import { configSchema, getConfig } from '@tanstack/router-generator'
5
+ import type { NitroConfig } from 'nitropack'
6
+
7
+ const tsrConfig = configSchema.partial().extend({
8
+ srcDirectory: z.string().optional().default('src'),
9
+ })
10
+
11
+ export function createTanStackConfig<
12
+ TFrameworkPlugin extends Record<string, unknown>,
13
+ >(frameworkPlugin?: TFrameworkPlugin) {
14
+ const schema = createTanStackStartOptionsSchema(frameworkPlugin)
15
+
16
+ return {
17
+ schema,
18
+ parse: (opts?: z.input<typeof schema>) => {
19
+ const options = schema.parse(opts)
20
+
21
+ const srcDirectory = options.tsr.srcDirectory
22
+
23
+ const routesDirectory =
24
+ options.tsr.routesDirectory ?? path.join(srcDirectory, 'routes')
25
+
26
+ const generatedRouteTree =
27
+ options.tsr.generatedRouteTree ??
28
+ path.join(srcDirectory, 'routeTree.gen.ts')
29
+
30
+ const clientEntryPath = (() => {
31
+ if (options.client.entry) {
32
+ return path.join(srcDirectory, options.client.entry)
33
+ }
34
+
35
+ if (existsSync(path.join(srcDirectory, 'client.tsx'))) {
36
+ return path.join(srcDirectory, 'client.tsx')
37
+ }
38
+
39
+ return '/~start/default-client-entry'
40
+ })()
41
+
42
+ const serverEntryPath = (() => {
43
+ if (options.server.entry) {
44
+ return path.join(srcDirectory, options.server.entry)
45
+ }
46
+
47
+ if (existsSync(path.join(srcDirectory, 'server.tsx'))) {
48
+ return path.join(srcDirectory, 'server.tsx')
49
+ }
50
+
51
+ return '/~start/default-server-entry'
52
+ })()
53
+
54
+ return {
55
+ ...options,
56
+ tsr: {
57
+ ...options.tsr,
58
+ ...getConfig({
59
+ ...options.tsr,
60
+ routesDirectory,
61
+ generatedRouteTree,
62
+ }),
63
+ },
64
+ clientEntryPath,
65
+ serverEntryPath,
66
+ }
67
+ },
68
+ }
69
+ }
70
+
71
+ export function createTanStackStartOptionsSchema(
72
+ frameworkPlugin: Record<string, unknown> = {},
73
+ ) {
74
+ return z
75
+ .object({
76
+ root: z.string().optional().default(process.cwd()),
77
+ target: z.custom<NitroConfig['preset']>().optional(),
78
+ ...frameworkPlugin,
79
+ tsr: tsrConfig.optional().default({}),
80
+ client: z
81
+ .object({
82
+ entry: z.string().optional(),
83
+ base: z.string().optional().default('/_build'),
84
+ })
85
+ .optional()
86
+ .default({}),
87
+ server: z
88
+ .object({
89
+ entry: z.string().optional(),
90
+ })
91
+ .optional()
92
+ .default({}),
93
+ serverFns: z
94
+ .object({
95
+ base: z.string().optional().default('/_server'),
96
+ })
97
+ .optional()
98
+ .default({}),
99
+ public: z
100
+ .object({
101
+ dir: z.string().optional().default('public'),
102
+ base: z.string().optional().default('/'),
103
+ })
104
+ .optional()
105
+ .default({}),
106
+ pages: z
107
+ .array(z.union([z.string(), pageSchema]))
108
+ .optional()
109
+ .default([]),
110
+ sitemap: pagePrerenderOptionsSchema
111
+ .extend({
112
+ host: z.string().optional(),
113
+ })
114
+ .optional(),
115
+ prerender: z
116
+ .object({
117
+ enabled: z.boolean().optional(),
118
+ concurrency: z.number().optional(),
119
+ filter: z.function().args(pageSchema).returns(z.any()).optional(),
120
+ failOnError: z.boolean().optional(),
121
+ })
122
+ .and(pagePrerenderOptionsSchema.optional())
123
+ .optional(),
124
+ })
125
+ .optional()
126
+ .default({})
127
+ }
128
+
129
+ const pageSitemapOptionsSchema = z.object({
130
+ exclude: z.boolean().optional(),
131
+ priority: z.number().min(0).max(1).optional(),
132
+ changefreq: z
133
+ .enum(['always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never'])
134
+ .optional(),
135
+ lastmod: z.union([z.string(), z.date()]).optional(),
136
+ alternateRefs: z
137
+ .array(
138
+ z.object({
139
+ href: z.string(),
140
+ hreflang: z.string(),
141
+ }),
142
+ )
143
+ .optional(),
144
+ images: z
145
+ .array(
146
+ z.object({
147
+ loc: z.string(),
148
+ caption: z.string().optional(),
149
+ title: z.string().optional(),
150
+ }),
151
+ )
152
+ .optional(),
153
+ news: z
154
+ .object({
155
+ publication: z.object({
156
+ name: z.string(),
157
+ language: z.string(),
158
+ }),
159
+ publicationDate: z.union([z.string(), z.date()]),
160
+ title: z.string(),
161
+ })
162
+ .optional(),
163
+ })
164
+
165
+ const pageBaseSchema = z.object({
166
+ path: z.string(),
167
+ sitemap: pageSitemapOptionsSchema.optional(),
168
+ fromCrawl: z.boolean().optional(),
169
+ })
170
+
171
+ const pagePrerenderOptionsSchema = z.object({
172
+ enabled: z.boolean().optional(),
173
+ autoSubfolderIndex: z.boolean().optional(),
174
+ crawlLinks: z.boolean().optional(),
175
+ retryCount: z.number().optional(),
176
+ retryDelay: z.number().optional(),
177
+ onSuccess: z
178
+ .function()
179
+ .args(
180
+ z.object({
181
+ page: pageBaseSchema,
182
+ html: z.string(),
183
+ }),
184
+ )
185
+ .returns(z.any())
186
+ .optional(),
187
+ })
188
+
189
+ export const pageSchema = pageBaseSchema.extend({
190
+ prerender: pagePrerenderOptionsSchema.optional(),
191
+ })
192
+
193
+ export type Page = z.infer<typeof pageSchema>
@@ -0,0 +1,111 @@
1
+ import { fileURLToPath, pathToFileURL } from 'node:url'
2
+ import { logDiff } from '@tanstack/router-utils'
3
+
4
+ import { compileStartOutputFactory } from './compilers'
5
+ import type { Plugin } from 'vite'
6
+ import type { CompileStartFrameworkOptions } from './compilers'
7
+
8
+ const debug =
9
+ process.env.TSR_VITE_DEBUG &&
10
+ ['true', 'start-plugin'].includes(process.env.TSR_VITE_DEBUG)
11
+
12
+ export type TanStackStartViteOptions = {
13
+ globalMiddlewareEntry: string
14
+ }
15
+
16
+ const transformFuncs = [
17
+ 'createServerFn',
18
+ 'createMiddleware',
19
+ 'serverOnly',
20
+ 'clientOnly',
21
+ 'createIsomorphicFn',
22
+ 'createServerFileRoute',
23
+ ]
24
+
25
+ const tokenRegex = new RegExp(transformFuncs.join('|'))
26
+
27
+ export function TanStackStartCompilerPlugin(
28
+ framework: CompileStartFrameworkOptions,
29
+ inputOpts?: {
30
+ client?: {
31
+ envName?: string
32
+ }
33
+ server?: {
34
+ envName?: string
35
+ }
36
+ },
37
+ ): Plugin {
38
+ const opts = {
39
+ client: {
40
+ envName: 'client',
41
+ ...inputOpts?.client,
42
+ },
43
+ server: {
44
+ envName: 'server',
45
+ ...inputOpts?.server,
46
+ },
47
+ }
48
+
49
+ return {
50
+ name: 'vite-plugin-tanstack-start-create-server-fn',
51
+ enforce: 'pre',
52
+ applyToEnvironment(env) {
53
+ return [opts.client.envName, opts.server.envName].includes(env.name)
54
+ },
55
+ transform(code, id) {
56
+ const env =
57
+ this.environment.name === opts.client.envName
58
+ ? 'client'
59
+ : this.environment.name === opts.server.envName
60
+ ? 'server'
61
+ : (() => {
62
+ throw new Error(
63
+ `Environment ${this.environment.name} not configured`,
64
+ )
65
+ })()
66
+
67
+ return transformCode({
68
+ code,
69
+ id,
70
+ env,
71
+ framework,
72
+ })
73
+ },
74
+ }
75
+ }
76
+
77
+ function transformCode(opts: {
78
+ code: string
79
+ id: string
80
+ env: 'server' | 'client'
81
+ framework: CompileStartFrameworkOptions
82
+ }) {
83
+ const { code, env, framework } = opts
84
+ let { id } = opts
85
+
86
+ const url = pathToFileURL(id)
87
+ url.searchParams.delete('v')
88
+ id = fileURLToPath(url).replace(/\\/g, '/')
89
+
90
+ const includesToken = tokenRegex.test(code)
91
+
92
+ if (!includesToken) {
93
+ return null
94
+ }
95
+
96
+ if (debug) console.info(`${env} Compiling Start: `, id)
97
+
98
+ const compileStartOutput = compileStartOutputFactory(framework)
99
+ const compiled = compileStartOutput({
100
+ code,
101
+ filename: id,
102
+ env,
103
+ })
104
+
105
+ if (debug) {
106
+ logDiff(code, compiled.code)
107
+ console.log('Output:\n', compiled.code + '\n\n')
108
+ }
109
+
110
+ return compiled
111
+ }
@@ -0,0 +1,8 @@
1
+ import { baseConfigSchema } from '@tanstack/router-generator'
2
+ import { z } from 'zod'
3
+
4
+ export const configSchema = baseConfigSchema.extend({
5
+ srcDirectory: z.string().optional().default('src'),
6
+ })
7
+
8
+ export type Config = z.infer<typeof configSchema>