@tanstack/router-plugin 1.39.2 → 1.39.4
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/README.md +21 -0
- package/dist/cjs/code-splitter.cjs +4 -0
- package/dist/cjs/code-splitter.cjs.map +1 -1
- package/dist/cjs/code-splitter.d.cts +3 -3
- package/dist/cjs/config.cjs +1 -0
- package/dist/cjs/config.cjs.map +1 -1
- package/dist/cjs/config.d.cts +3 -4
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +2 -0
- package/dist/cjs/router-generator.cjs.map +1 -1
- package/dist/cjs/router-generator.d.cts +1 -1
- package/dist/cjs/vite.cjs +2 -0
- package/dist/cjs/vite.cjs.map +1 -1
- package/dist/cjs/vite.d.cts +8 -7
- package/dist/esm/code-splitter.d.ts +3 -3
- package/dist/esm/code-splitter.js +4 -0
- package/dist/esm/code-splitter.js.map +1 -1
- package/dist/esm/config.d.ts +3 -4
- package/dist/esm/config.js +1 -0
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/router-generator.d.ts +1 -1
- package/dist/esm/router-generator.js.map +1 -1
- package/dist/esm/vite.d.ts +8 -7
- package/dist/esm/vite.js +3 -1
- package/dist/esm/vite.js.map +1 -1
- package/package.json +2 -5
- package/src/code-splitter.ts +7 -3
- package/src/config.ts +3 -3
- package/src/index.ts +2 -0
- package/src/router-generator.ts +3 -3
- package/src/vite.ts +12 -7
package/README.md
CHANGED
|
@@ -3,3 +3,24 @@
|
|
|
3
3
|
# TanStack Router Plugin
|
|
4
4
|
|
|
5
5
|
See https://tanstack.com/router/latest/docs/framework/react/guide/file-based-routing
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -D @tanstack/router-plugin
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### Usage with vite
|
|
14
|
+
|
|
15
|
+
```js
|
|
16
|
+
// vite.config.js
|
|
17
|
+
import { defineConfig } from 'vite'
|
|
18
|
+
import { TanStackRouterVite } from '@tanstack/router-plugin/vite'
|
|
19
|
+
|
|
20
|
+
export default defineConfig({
|
|
21
|
+
plugins: [
|
|
22
|
+
TanStackRouterVite(),
|
|
23
|
+
// ...
|
|
24
|
+
],
|
|
25
|
+
})
|
|
26
|
+
```
|
|
@@ -128,6 +128,10 @@ const unpluginFactory = (options = {}, { framework }) => {
|
|
|
128
128
|
return null;
|
|
129
129
|
},
|
|
130
130
|
async transform(code, id) {
|
|
131
|
+
var _a;
|
|
132
|
+
if (!((_a = userConfig.experimental) == null ? void 0 : _a.enableCodeSplitting)) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
131
135
|
const url = node_url.pathToFileURL(id);
|
|
132
136
|
url.searchParams.delete("v");
|
|
133
137
|
id = node_url.fileURLToPath(url).replace(/\\/g, "/");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-splitter.cjs","sources":["../../src/code-splitter.ts"],"sourcesContent":["import { isAbsolute, join } from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { createUnplugin } from 'unplugin'\n\nimport { compileAst } from './ast'\nimport { compileFile, splitFile } from './compilers'\nimport { getConfig } from './config'\nimport { splitPrefix } from './constants'\n\nimport type {
|
|
1
|
+
{"version":3,"file":"code-splitter.cjs","sources":["../../src/code-splitter.ts"],"sourcesContent":["import { isAbsolute, join } from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { createUnplugin } from 'unplugin'\n\nimport { compileAst } from './ast'\nimport { compileFile, splitFile } from './compilers'\nimport { getConfig } from './config'\nimport { splitPrefix } from './constants'\n\nimport type { Config } from './config'\nimport type { UnpluginFactory } from 'unplugin'\n\nfunction capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nfunction fileIsInRoutesDirectory(filePath: string, routesDirectory: string) {\n const routesDirectoryPath = isAbsolute(routesDirectory)\n ? routesDirectory\n : join(process.cwd(), routesDirectory)\n\n return filePath.startsWith(routesDirectoryPath)\n}\n\nconst bannedBeforeExternalPlugins = [\n {\n identifier: '@react-refresh',\n pkg: '@vitejs/plugin-react',\n usage: 'viteReact()',\n },\n]\n\nclass FoundPluginInBeforeCode extends Error {\n constructor(\n externalPlugin: (typeof bannedBeforeExternalPlugins)[number],\n framework: string,\n ) {\n super(`We detected that the '${externalPlugin.pkg}' was passed before '@tanstack/router-plugin'. Please make sure that '@tanstack/router-plugin' is passed before '${externalPlugin.pkg}' and try again: \ne.g.\nplugins: [\n TanStackRouter${capitalizeFirst(framework)}(), // Place this before ${externalPlugin.usage}\n ${externalPlugin.usage},\n]\n`)\n }\n}\n\nexport const unpluginFactory: UnpluginFactory<Partial<Config> | undefined> = (\n options = {},\n { framework },\n) => {\n const debug = Boolean(process.env.TSR_VITE_DEBUG)\n\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const handleSplittingFile = async (code: string, id: string) => {\n const compiledAst = compileAst({\n root: ROOT,\n })\n\n if (debug) console.info('Splitting route: ', id)\n\n const compiled = await splitFile({\n code,\n compileAst: compiledAst,\n filename: id,\n })\n\n if (debug) console.info('')\n if (debug) console.info('Split Output')\n if (debug) console.info('')\n if (debug) console.info(compiled.code)\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n\n return compiled\n }\n\n const handleCompilingFile = async (code: string, id: string) => {\n const compiledAst = compileAst({\n root: ROOT,\n })\n\n if (debug) console.info('Handling createRoute: ', id)\n\n const compiled = await compileFile({\n code,\n compileAst: compiledAst,\n filename: id,\n })\n\n if (debug) console.info('')\n if (debug) console.info('Compiled Output')\n if (debug) console.info('')\n if (debug) console.info(compiled.code)\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n\n return compiled\n }\n\n return {\n name: 'router-code-splitter-plugin',\n enforce: 'pre',\n resolveId(source) {\n if (!userConfig.experimental?.enableCodeSplitting) {\n return null\n }\n\n if (source.startsWith(splitPrefix + ':')) {\n return source.replace(splitPrefix + ':', '')\n }\n return null\n },\n async transform(code, id) {\n if (!userConfig.experimental?.enableCodeSplitting) {\n return null\n }\n\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n id = fileURLToPath(url).replace(/\\\\/g, '/')\n\n if (id.includes(splitPrefix)) {\n return await handleSplittingFile(code, id)\n } else if (\n fileIsInRoutesDirectory(id, userConfig.routesDirectory) &&\n (code.includes('createRoute(') || code.includes('createFileRoute('))\n ) {\n for (const externalPlugin of bannedBeforeExternalPlugins) {\n if (code.includes(externalPlugin.identifier)) {\n throw new FoundPluginInBeforeCode(externalPlugin, framework)\n }\n }\n\n return await handleCompilingFile(code, id)\n }\n\n return null\n },\n vite: {\n async configResolved(config) {\n ROOT = config.root\n userConfig = await getConfig(options, ROOT)\n },\n },\n }\n}\n\nexport const unpluginRouterCodeSplitter =\n /* #__PURE__ */ createUnplugin(unpluginFactory)\n"],"names":["isAbsolute","join","compileAst","splitFile","compileFile","splitPrefix","pathToFileURL","fileURLToPath","config","getConfig"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Config } from './config.cjs';
|
|
2
2
|
import { UnpluginFactory } from 'unplugin';
|
|
3
3
|
|
|
4
|
-
export declare const unpluginFactory: UnpluginFactory<Partial<
|
|
4
|
+
export declare const unpluginFactory: UnpluginFactory<Partial<Config> | undefined>;
|
|
5
5
|
export declare const unpluginRouterCodeSplitter: import('unplugin').UnpluginInstance<Partial<{
|
|
6
6
|
routeFileIgnorePrefix: string;
|
|
7
7
|
routesDirectory: string;
|
|
@@ -19,4 +19,4 @@ export declare const unpluginRouterCodeSplitter: import('unplugin').UnpluginInst
|
|
|
19
19
|
} | undefined;
|
|
20
20
|
routeFilePrefix?: string | undefined;
|
|
21
21
|
routeFileIgnorePattern?: string | undefined;
|
|
22
|
-
}
|
|
22
|
+
}> | undefined, boolean>;
|
package/dist/cjs/config.cjs
CHANGED
|
@@ -12,5 +12,6 @@ const getConfig = async (inlineConfig, root) => {
|
|
|
12
12
|
const config = await routerGenerator.getConfig(inlineConfig, root);
|
|
13
13
|
return configSchema.parse({ ...config, ...inlineConfig });
|
|
14
14
|
};
|
|
15
|
+
exports.configSchema = configSchema;
|
|
15
16
|
exports.getConfig = getConfig;
|
|
16
17
|
//# sourceMappingURL=config.cjs.map
|
package/dist/cjs/config.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.cjs","sources":["../../src/config.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n configSchema as generatorConfigSchema,\n getConfig as getGeneratorConfig,\n} from '@tanstack/router-generator'\n\
|
|
1
|
+
{"version":3,"file":"config.cjs","sources":["../../src/config.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n configSchema as generatorConfigSchema,\n getConfig as getGeneratorConfig,\n} from '@tanstack/router-generator'\n\nexport const configSchema = generatorConfigSchema.extend({\n enableRouteGeneration: z.boolean().optional(),\n experimental: z\n .object({\n enableCodeSplitting: z.boolean().optional(),\n })\n .optional(),\n})\n\nexport const getConfig = async (\n inlineConfig: Partial<Config>,\n root: string,\n) => {\n const config = await getGeneratorConfig(inlineConfig, root)\n\n return configSchema.parse({ ...config, ...inlineConfig })\n}\n\nexport type Config = z.infer<typeof configSchema>\n"],"names":["generatorConfigSchema","z","getGeneratorConfig"],"mappings":";;;;AAMa,MAAA,eAAeA,6BAAsB,OAAO;AAAA,EACvD,uBAAuBC,IAAA,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,cAAcA,MACX,OAAO;AAAA,IACN,qBAAqBA,IAAA,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC3C,CAAA,EACA,SAAS;AACd,CAAC;AAEY,MAAA,YAAY,OACvB,cACA,SACG;AACH,QAAM,SAAS,MAAMC,gBAAAA,UAAmB,cAAc,IAAI;AAE1D,SAAO,aAAa,MAAM,EAAE,GAAG,QAAQ,GAAG,cAAc;AAC1D;;;"}
|
package/dist/cjs/config.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
|
|
3
|
-
declare const configSchema: z.ZodObject<z.objectUtil.extendShape<{
|
|
3
|
+
export declare const configSchema: z.ZodObject<z.objectUtil.extendShape<{
|
|
4
4
|
routeFilePrefix: z.ZodOptional<z.ZodString>;
|
|
5
5
|
routeFileIgnorePrefix: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
6
6
|
routeFileIgnorePattern: z.ZodOptional<z.ZodString>;
|
|
@@ -57,7 +57,7 @@ declare const configSchema: z.ZodObject<z.objectUtil.extendShape<{
|
|
|
57
57
|
routeTreeFileHeader?: string[] | undefined;
|
|
58
58
|
routeTreeFileFooter?: string[] | undefined;
|
|
59
59
|
}>;
|
|
60
|
-
export declare const getConfig: (inlineConfig: Partial<
|
|
60
|
+
export declare const getConfig: (inlineConfig: Partial<Config>, root: string) => Promise<{
|
|
61
61
|
routeFileIgnorePrefix: string;
|
|
62
62
|
routesDirectory: string;
|
|
63
63
|
generatedRouteTree: string;
|
|
@@ -75,5 +75,4 @@ export declare const getConfig: (inlineConfig: Partial<PluginOptions>, root: str
|
|
|
75
75
|
routeFilePrefix?: string | undefined;
|
|
76
76
|
routeFileIgnorePattern?: string | undefined;
|
|
77
77
|
}>;
|
|
78
|
-
export type
|
|
79
|
-
export {};
|
|
78
|
+
export type Config = z.infer<typeof configSchema>;
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const codeSplitter = require("./code-splitter.cjs");
|
|
4
4
|
const routerGenerator = require("./router-generator.cjs");
|
|
5
|
+
const config = require("./config.cjs");
|
|
5
6
|
exports.unpluginRouterCodeSplitter = codeSplitter.unpluginRouterCodeSplitter;
|
|
6
7
|
exports.unpluginRouterGenerator = routerGenerator.unpluginRouterGenerator;
|
|
8
|
+
exports.configSchema = config.configSchema;
|
|
7
9
|
//# sourceMappingURL=index.cjs.map
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-generator.cjs","sources":["../../src/router-generator.ts"],"sourcesContent":["import { isAbsolute, join, normalize, resolve } from 'node:path'\nimport { createUnplugin } from 'unplugin'\nimport { generator } from '@tanstack/router-generator'\n\nimport { getConfig } from './config'\nimport { CONFIG_FILE_NAME } from './constants'\nimport type {
|
|
1
|
+
{"version":3,"file":"router-generator.cjs","sources":["../../src/router-generator.ts"],"sourcesContent":["import { isAbsolute, join, normalize, resolve } from 'node:path'\nimport { createUnplugin } from 'unplugin'\nimport { generator } from '@tanstack/router-generator'\n\nimport { getConfig } from './config'\nimport { CONFIG_FILE_NAME } from './constants'\nimport type { Config } from './config'\nimport type { UnpluginFactory } from 'unplugin'\n\nlet lock = false\nconst checkLock = () => lock\nconst setLock = (bool: boolean) => {\n lock = bool\n}\n\nconst unpluginFactory: UnpluginFactory<Partial<Config> | undefined> = (\n options = {},\n) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const generate = async () => {\n if (checkLock()) {\n return\n }\n\n setLock(true)\n\n try {\n await generator(userConfig)\n } catch (err) {\n console.error(err)\n console.info()\n } finally {\n setLock(false)\n }\n }\n\n const handleFile = async (\n file: string,\n event: 'create' | 'update' | 'delete',\n ) => {\n const filePath = normalize(file)\n\n if (filePath === join(ROOT, CONFIG_FILE_NAME)) {\n userConfig = await getConfig(options, ROOT)\n return\n }\n\n if (\n event === 'update' &&\n filePath === resolve(userConfig.generatedRouteTree)\n ) {\n // skip generating routes if the generated route tree is updated\n return\n }\n\n const routesDirectoryPath = isAbsolute(userConfig.routesDirectory)\n ? userConfig.routesDirectory\n : join(ROOT, userConfig.routesDirectory)\n\n if (filePath.startsWith(routesDirectoryPath)) {\n await generate()\n }\n }\n\n const run: (cb: () => Promise<void> | void) => Promise<void> = async (cb) => {\n if (userConfig.enableRouteGeneration ?? true) {\n await cb()\n }\n }\n\n return {\n name: 'router-generator-plugin',\n async watchChange(id, { event }) {\n await run(async () => {\n await handleFile(id, event)\n })\n },\n vite: {\n async configResolved(config) {\n ROOT = config.root\n userConfig = await getConfig(options, ROOT)\n\n await run(generate)\n },\n },\n }\n}\n\nexport const unpluginRouterGenerator =\n /* #__PURE__ */ createUnplugin(unpluginFactory)\n"],"names":["generator","normalize","join","CONFIG_FILE_NAME","getConfig","resolve","isAbsolute","config"],"mappings":";;;;;;;AASA,IAAI,OAAO;AACX,MAAM,YAAY,MAAM;AACxB,MAAM,UAAU,CAAC,SAAkB;AAC1B,SAAA;AACT;AAEA,MAAM,kBAAgE,CACpE,UAAU,OACP;AACC,MAAA,OAAe,QAAQ;AAC3B,MAAI,aAAa;AAEjB,QAAM,WAAW,YAAY;AAC3B,QAAI,aAAa;AACf;AAAA,IACF;AAEA,YAAQ,IAAI;AAER,QAAA;AACF,YAAMA,gBAAAA,UAAU,UAAU;AAAA,aACnB,KAAK;AACZ,cAAQ,MAAM,GAAG;AACjB,cAAQ,KAAK;AAAA,IAAA,UACb;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EAAA;AAGI,QAAA,aAAa,OACjB,MACA,UACG;AACG,UAAA,WAAWC,oBAAU,IAAI;AAE/B,QAAI,aAAaC,UAAAA,KAAK,MAAMC,UAAgB,gBAAA,GAAG;AAChC,mBAAA,MAAMC,OAAAA,UAAU,SAAS,IAAI;AAC1C;AAAA,IACF;AAEA,QACE,UAAU,YACV,aAAaC,UAAAA,QAAQ,WAAW,kBAAkB,GAClD;AAEA;AAAA,IACF;AAEM,UAAA,sBAAsBC,UAAAA,WAAW,WAAW,eAAe,IAC7D,WAAW,kBACXJ,eAAK,MAAM,WAAW,eAAe;AAErC,QAAA,SAAS,WAAW,mBAAmB,GAAG;AAC5C,YAAM,SAAS;AAAA,IACjB;AAAA,EAAA;AAGI,QAAA,MAAyD,OAAO,OAAO;AACvE,QAAA,WAAW,yBAAyB,MAAM;AAC5C,YAAM,GAAG;AAAA,IACX;AAAA,EAAA;AAGK,SAAA;AAAA,IACL,MAAM;AAAA,IACN,MAAM,YAAY,IAAI,EAAE,SAAS;AAC/B,YAAM,IAAI,YAAY;AACd,cAAA,WAAW,IAAI,KAAK;AAAA,MAAA,CAC3B;AAAA,IACH;AAAA,IACA,MAAM;AAAA,MACJ,MAAM,eAAeK,UAAQ;AAC3B,eAAOA,SAAO;AACD,qBAAA,MAAMH,OAAAA,UAAU,SAAS,IAAI;AAE1C,cAAM,IAAI,QAAQ;AAAA,MACpB;AAAA,IACF;AAAA,EAAA;AAEJ;AAEa,MAAA,kEACoB,eAAe;;"}
|
package/dist/cjs/vite.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const codeSplitter = require("./code-splitter.cjs");
|
|
4
|
+
const config = require("./config.cjs");
|
|
4
5
|
const routerGenerator = require("./router-generator.cjs");
|
|
5
6
|
const TanStackRouterGeneratorVite = routerGenerator.unpluginRouterGenerator.vite;
|
|
6
7
|
const TanStackRouterCodeSplitterVite = codeSplitter.unpluginRouterCodeSplitter.vite;
|
|
@@ -10,6 +11,7 @@ function TanStackRouterVite(inlineConfig) {
|
|
|
10
11
|
TanStackRouterCodeSplitterVite(inlineConfig)
|
|
11
12
|
];
|
|
12
13
|
}
|
|
14
|
+
exports.configSchema = config.configSchema;
|
|
13
15
|
exports.TanStackRouterCodeSplitterVite = TanStackRouterCodeSplitterVite;
|
|
14
16
|
exports.TanStackRouterGeneratorVite = TanStackRouterGeneratorVite;
|
|
15
17
|
exports.TanStackRouterVite = TanStackRouterVite;
|
package/dist/cjs/vite.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.cjs","sources":["../../src/vite.ts"],"sourcesContent":["import { unpluginRouterCodeSplitter } from './code-splitter'\nimport { unpluginRouterGenerator } from './router-generator'\n\nimport type {
|
|
1
|
+
{"version":3,"file":"vite.cjs","sources":["../../src/vite.ts"],"sourcesContent":["import { unpluginRouterCodeSplitter } from './code-splitter'\nimport { configSchema } from './config'\nimport { unpluginRouterGenerator } from './router-generator'\n\nimport type { Config } from './config'\nimport type { VitePlugin } from 'unplugin'\n\nconst TanStackRouterGeneratorVite = unpluginRouterGenerator.vite\nconst TanStackRouterCodeSplitterVite = unpluginRouterCodeSplitter.vite\n\nfunction TanStackRouterVite(inlineConfig?: Partial<Config>): Array<VitePlugin> {\n return [\n TanStackRouterGeneratorVite(inlineConfig) as VitePlugin,\n TanStackRouterCodeSplitterVite(inlineConfig) as VitePlugin,\n ]\n}\n\nexport {\n configSchema,\n TanStackRouterGeneratorVite,\n TanStackRouterCodeSplitterVite,\n TanStackRouterVite,\n}\nexport type { Config }\n"],"names":["unpluginRouterGenerator","unpluginRouterCodeSplitter"],"mappings":";;;;;AAOA,MAAM,8BAA8BA,gBAAwB,wBAAA;AAC5D,MAAM,iCAAiCC,aAA2B,2BAAA;AAElE,SAAS,mBAAmB,cAAmD;AACtE,SAAA;AAAA,IACL,4BAA4B,YAAY;AAAA,IACxC,+BAA+B,YAAY;AAAA,EAAA;AAE/C;;;;;"}
|
package/dist/cjs/vite.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { configSchema, Config } from './config.cjs';
|
|
2
2
|
import { VitePlugin } from 'unplugin';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
declare const TanStackRouterGeneratorVite: (options?: Partial<{
|
|
5
5
|
routeFileIgnorePrefix: string;
|
|
6
6
|
routesDirectory: string;
|
|
7
7
|
generatedRouteTree: string;
|
|
@@ -18,8 +18,8 @@ export declare const TanStackRouterGeneratorVite: (options: Partial<{
|
|
|
18
18
|
} | undefined;
|
|
19
19
|
routeFilePrefix?: string | undefined;
|
|
20
20
|
routeFileIgnorePattern?: string | undefined;
|
|
21
|
-
}>) => VitePlugin<any> | VitePlugin<any>[];
|
|
22
|
-
|
|
21
|
+
}> | undefined) => VitePlugin<any> | VitePlugin<any>[];
|
|
22
|
+
declare const TanStackRouterCodeSplitterVite: (options?: Partial<{
|
|
23
23
|
routeFileIgnorePrefix: string;
|
|
24
24
|
routesDirectory: string;
|
|
25
25
|
generatedRouteTree: string;
|
|
@@ -36,6 +36,7 @@ export declare const TanStackRouterCodeSplitterVite: (options: Partial<{
|
|
|
36
36
|
} | undefined;
|
|
37
37
|
routeFilePrefix?: string | undefined;
|
|
38
38
|
routeFileIgnorePattern?: string | undefined;
|
|
39
|
-
}>) => VitePlugin<any> | VitePlugin<any>[];
|
|
40
|
-
|
|
41
|
-
export
|
|
39
|
+
}> | undefined) => VitePlugin<any> | VitePlugin<any>[];
|
|
40
|
+
declare function TanStackRouterVite(inlineConfig?: Partial<Config>): Array<VitePlugin>;
|
|
41
|
+
export { configSchema, TanStackRouterGeneratorVite, TanStackRouterCodeSplitterVite, TanStackRouterVite, };
|
|
42
|
+
export type { Config };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Config } from './config.js';
|
|
2
2
|
import { UnpluginFactory } from 'unplugin';
|
|
3
3
|
|
|
4
|
-
export declare const unpluginFactory: UnpluginFactory<Partial<
|
|
4
|
+
export declare const unpluginFactory: UnpluginFactory<Partial<Config> | undefined>;
|
|
5
5
|
export declare const unpluginRouterCodeSplitter: import('unplugin').UnpluginInstance<Partial<{
|
|
6
6
|
routeFileIgnorePrefix: string;
|
|
7
7
|
routesDirectory: string;
|
|
@@ -19,4 +19,4 @@ export declare const unpluginRouterCodeSplitter: import('unplugin').UnpluginInst
|
|
|
19
19
|
} | undefined;
|
|
20
20
|
routeFilePrefix?: string | undefined;
|
|
21
21
|
routeFileIgnorePattern?: string | undefined;
|
|
22
|
-
}
|
|
22
|
+
}> | undefined, boolean>;
|
|
@@ -126,6 +126,10 @@ const unpluginFactory = (options = {}, { framework }) => {
|
|
|
126
126
|
return null;
|
|
127
127
|
},
|
|
128
128
|
async transform(code, id) {
|
|
129
|
+
var _a;
|
|
130
|
+
if (!((_a = userConfig.experimental) == null ? void 0 : _a.enableCodeSplitting)) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
129
133
|
const url = pathToFileURL(id);
|
|
130
134
|
url.searchParams.delete("v");
|
|
131
135
|
id = fileURLToPath(url).replace(/\\/g, "/");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-splitter.js","sources":["../../src/code-splitter.ts"],"sourcesContent":["import { isAbsolute, join } from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { createUnplugin } from 'unplugin'\n\nimport { compileAst } from './ast'\nimport { compileFile, splitFile } from './compilers'\nimport { getConfig } from './config'\nimport { splitPrefix } from './constants'\n\nimport type {
|
|
1
|
+
{"version":3,"file":"code-splitter.js","sources":["../../src/code-splitter.ts"],"sourcesContent":["import { isAbsolute, join } from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { createUnplugin } from 'unplugin'\n\nimport { compileAst } from './ast'\nimport { compileFile, splitFile } from './compilers'\nimport { getConfig } from './config'\nimport { splitPrefix } from './constants'\n\nimport type { Config } from './config'\nimport type { UnpluginFactory } from 'unplugin'\n\nfunction capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nfunction fileIsInRoutesDirectory(filePath: string, routesDirectory: string) {\n const routesDirectoryPath = isAbsolute(routesDirectory)\n ? routesDirectory\n : join(process.cwd(), routesDirectory)\n\n return filePath.startsWith(routesDirectoryPath)\n}\n\nconst bannedBeforeExternalPlugins = [\n {\n identifier: '@react-refresh',\n pkg: '@vitejs/plugin-react',\n usage: 'viteReact()',\n },\n]\n\nclass FoundPluginInBeforeCode extends Error {\n constructor(\n externalPlugin: (typeof bannedBeforeExternalPlugins)[number],\n framework: string,\n ) {\n super(`We detected that the '${externalPlugin.pkg}' was passed before '@tanstack/router-plugin'. Please make sure that '@tanstack/router-plugin' is passed before '${externalPlugin.pkg}' and try again: \ne.g.\nplugins: [\n TanStackRouter${capitalizeFirst(framework)}(), // Place this before ${externalPlugin.usage}\n ${externalPlugin.usage},\n]\n`)\n }\n}\n\nexport const unpluginFactory: UnpluginFactory<Partial<Config> | undefined> = (\n options = {},\n { framework },\n) => {\n const debug = Boolean(process.env.TSR_VITE_DEBUG)\n\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const handleSplittingFile = async (code: string, id: string) => {\n const compiledAst = compileAst({\n root: ROOT,\n })\n\n if (debug) console.info('Splitting route: ', id)\n\n const compiled = await splitFile({\n code,\n compileAst: compiledAst,\n filename: id,\n })\n\n if (debug) console.info('')\n if (debug) console.info('Split Output')\n if (debug) console.info('')\n if (debug) console.info(compiled.code)\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n\n return compiled\n }\n\n const handleCompilingFile = async (code: string, id: string) => {\n const compiledAst = compileAst({\n root: ROOT,\n })\n\n if (debug) console.info('Handling createRoute: ', id)\n\n const compiled = await compileFile({\n code,\n compileAst: compiledAst,\n filename: id,\n })\n\n if (debug) console.info('')\n if (debug) console.info('Compiled Output')\n if (debug) console.info('')\n if (debug) console.info(compiled.code)\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n\n return compiled\n }\n\n return {\n name: 'router-code-splitter-plugin',\n enforce: 'pre',\n resolveId(source) {\n if (!userConfig.experimental?.enableCodeSplitting) {\n return null\n }\n\n if (source.startsWith(splitPrefix + ':')) {\n return source.replace(splitPrefix + ':', '')\n }\n return null\n },\n async transform(code, id) {\n if (!userConfig.experimental?.enableCodeSplitting) {\n return null\n }\n\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n id = fileURLToPath(url).replace(/\\\\/g, '/')\n\n if (id.includes(splitPrefix)) {\n return await handleSplittingFile(code, id)\n } else if (\n fileIsInRoutesDirectory(id, userConfig.routesDirectory) &&\n (code.includes('createRoute(') || code.includes('createFileRoute('))\n ) {\n for (const externalPlugin of bannedBeforeExternalPlugins) {\n if (code.includes(externalPlugin.identifier)) {\n throw new FoundPluginInBeforeCode(externalPlugin, framework)\n }\n }\n\n return await handleCompilingFile(code, id)\n }\n\n return null\n },\n vite: {\n async configResolved(config) {\n ROOT = config.root\n userConfig = await getConfig(options, ROOT)\n },\n },\n }\n}\n\nexport const unpluginRouterCodeSplitter =\n /* #__PURE__ */ createUnplugin(unpluginFactory)\n"],"names":[],"mappings":"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"}
|
package/dist/esm/config.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
|
|
3
|
-
declare const configSchema: z.ZodObject<z.objectUtil.extendShape<{
|
|
3
|
+
export declare const configSchema: z.ZodObject<z.objectUtil.extendShape<{
|
|
4
4
|
routeFilePrefix: z.ZodOptional<z.ZodString>;
|
|
5
5
|
routeFileIgnorePrefix: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
6
6
|
routeFileIgnorePattern: z.ZodOptional<z.ZodString>;
|
|
@@ -57,7 +57,7 @@ declare const configSchema: z.ZodObject<z.objectUtil.extendShape<{
|
|
|
57
57
|
routeTreeFileHeader?: string[] | undefined;
|
|
58
58
|
routeTreeFileFooter?: string[] | undefined;
|
|
59
59
|
}>;
|
|
60
|
-
export declare const getConfig: (inlineConfig: Partial<
|
|
60
|
+
export declare const getConfig: (inlineConfig: Partial<Config>, root: string) => Promise<{
|
|
61
61
|
routeFileIgnorePrefix: string;
|
|
62
62
|
routesDirectory: string;
|
|
63
63
|
generatedRouteTree: string;
|
|
@@ -75,5 +75,4 @@ export declare const getConfig: (inlineConfig: Partial<PluginOptions>, root: str
|
|
|
75
75
|
routeFilePrefix?: string | undefined;
|
|
76
76
|
routeFileIgnorePattern?: string | undefined;
|
|
77
77
|
}>;
|
|
78
|
-
export type
|
|
79
|
-
export {};
|
|
78
|
+
export type Config = z.infer<typeof configSchema>;
|
package/dist/esm/config.js
CHANGED
package/dist/esm/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sources":["../../src/config.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n configSchema as generatorConfigSchema,\n getConfig as getGeneratorConfig,\n} from '@tanstack/router-generator'\n\
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../src/config.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n configSchema as generatorConfigSchema,\n getConfig as getGeneratorConfig,\n} from '@tanstack/router-generator'\n\nexport const configSchema = generatorConfigSchema.extend({\n enableRouteGeneration: z.boolean().optional(),\n experimental: z\n .object({\n enableCodeSplitting: z.boolean().optional(),\n })\n .optional(),\n})\n\nexport const getConfig = async (\n inlineConfig: Partial<Config>,\n root: string,\n) => {\n const config = await getGeneratorConfig(inlineConfig, root)\n\n return configSchema.parse({ ...config, ...inlineConfig })\n}\n\nexport type Config = z.infer<typeof configSchema>\n"],"names":["generatorConfigSchema","getGeneratorConfig"],"mappings":";;AAMa,MAAA,eAAeA,eAAsB,OAAO;AAAA,EACvD,uBAAuB,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,cAAc,EACX,OAAO;AAAA,IACN,qBAAqB,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC3C,CAAA,EACA,SAAS;AACd,CAAC;AAEY,MAAA,YAAY,OACvB,cACA,SACG;AACH,QAAM,SAAS,MAAMC,YAAmB,cAAc,IAAI;AAE1D,SAAO,aAAa,MAAM,EAAE,GAAG,QAAQ,GAAG,cAAc;AAC1D;"}
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-generator.js","sources":["../../src/router-generator.ts"],"sourcesContent":["import { isAbsolute, join, normalize, resolve } from 'node:path'\nimport { createUnplugin } from 'unplugin'\nimport { generator } from '@tanstack/router-generator'\n\nimport { getConfig } from './config'\nimport { CONFIG_FILE_NAME } from './constants'\nimport type {
|
|
1
|
+
{"version":3,"file":"router-generator.js","sources":["../../src/router-generator.ts"],"sourcesContent":["import { isAbsolute, join, normalize, resolve } from 'node:path'\nimport { createUnplugin } from 'unplugin'\nimport { generator } from '@tanstack/router-generator'\n\nimport { getConfig } from './config'\nimport { CONFIG_FILE_NAME } from './constants'\nimport type { Config } from './config'\nimport type { UnpluginFactory } from 'unplugin'\n\nlet lock = false\nconst checkLock = () => lock\nconst setLock = (bool: boolean) => {\n lock = bool\n}\n\nconst unpluginFactory: UnpluginFactory<Partial<Config> | undefined> = (\n options = {},\n) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const generate = async () => {\n if (checkLock()) {\n return\n }\n\n setLock(true)\n\n try {\n await generator(userConfig)\n } catch (err) {\n console.error(err)\n console.info()\n } finally {\n setLock(false)\n }\n }\n\n const handleFile = async (\n file: string,\n event: 'create' | 'update' | 'delete',\n ) => {\n const filePath = normalize(file)\n\n if (filePath === join(ROOT, CONFIG_FILE_NAME)) {\n userConfig = await getConfig(options, ROOT)\n return\n }\n\n if (\n event === 'update' &&\n filePath === resolve(userConfig.generatedRouteTree)\n ) {\n // skip generating routes if the generated route tree is updated\n return\n }\n\n const routesDirectoryPath = isAbsolute(userConfig.routesDirectory)\n ? userConfig.routesDirectory\n : join(ROOT, userConfig.routesDirectory)\n\n if (filePath.startsWith(routesDirectoryPath)) {\n await generate()\n }\n }\n\n const run: (cb: () => Promise<void> | void) => Promise<void> = async (cb) => {\n if (userConfig.enableRouteGeneration ?? true) {\n await cb()\n }\n }\n\n return {\n name: 'router-generator-plugin',\n async watchChange(id, { event }) {\n await run(async () => {\n await handleFile(id, event)\n })\n },\n vite: {\n async configResolved(config) {\n ROOT = config.root\n userConfig = await getConfig(options, ROOT)\n\n await run(generate)\n },\n },\n }\n}\n\nexport const unpluginRouterGenerator =\n /* #__PURE__ */ createUnplugin(unpluginFactory)\n"],"names":[],"mappings":";;;;;AASA,IAAI,OAAO;AACX,MAAM,YAAY,MAAM;AACxB,MAAM,UAAU,CAAC,SAAkB;AAC1B,SAAA;AACT;AAEA,MAAM,kBAAgE,CACpE,UAAU,OACP;AACC,MAAA,OAAe,QAAQ;AAC3B,MAAI,aAAa;AAEjB,QAAM,WAAW,YAAY;AAC3B,QAAI,aAAa;AACf;AAAA,IACF;AAEA,YAAQ,IAAI;AAER,QAAA;AACF,YAAM,UAAU,UAAU;AAAA,aACnB,KAAK;AACZ,cAAQ,MAAM,GAAG;AACjB,cAAQ,KAAK;AAAA,IAAA,UACb;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EAAA;AAGI,QAAA,aAAa,OACjB,MACA,UACG;AACG,UAAA,WAAW,UAAU,IAAI;AAE/B,QAAI,aAAa,KAAK,MAAM,gBAAgB,GAAG;AAChC,mBAAA,MAAM,UAAU,SAAS,IAAI;AAC1C;AAAA,IACF;AAEA,QACE,UAAU,YACV,aAAa,QAAQ,WAAW,kBAAkB,GAClD;AAEA;AAAA,IACF;AAEM,UAAA,sBAAsB,WAAW,WAAW,eAAe,IAC7D,WAAW,kBACX,KAAK,MAAM,WAAW,eAAe;AAErC,QAAA,SAAS,WAAW,mBAAmB,GAAG;AAC5C,YAAM,SAAS;AAAA,IACjB;AAAA,EAAA;AAGI,QAAA,MAAyD,OAAO,OAAO;AACvE,QAAA,WAAW,yBAAyB,MAAM;AAC5C,YAAM,GAAG;AAAA,IACX;AAAA,EAAA;AAGK,SAAA;AAAA,IACL,MAAM;AAAA,IACN,MAAM,YAAY,IAAI,EAAE,SAAS;AAC/B,YAAM,IAAI,YAAY;AACd,cAAA,WAAW,IAAI,KAAK;AAAA,MAAA,CAC3B;AAAA,IACH;AAAA,IACA,MAAM;AAAA,MACJ,MAAM,eAAe,QAAQ;AAC3B,eAAO,OAAO;AACD,qBAAA,MAAM,UAAU,SAAS,IAAI;AAE1C,cAAM,IAAI,QAAQ;AAAA,MACpB;AAAA,IACF;AAAA,EAAA;AAEJ;AAEa,MAAA,yDACoB,eAAe;"}
|
package/dist/esm/vite.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { configSchema, Config } from './config.js';
|
|
2
2
|
import { VitePlugin } from 'unplugin';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
declare const TanStackRouterGeneratorVite: (options?: Partial<{
|
|
5
5
|
routeFileIgnorePrefix: string;
|
|
6
6
|
routesDirectory: string;
|
|
7
7
|
generatedRouteTree: string;
|
|
@@ -18,8 +18,8 @@ export declare const TanStackRouterGeneratorVite: (options: Partial<{
|
|
|
18
18
|
} | undefined;
|
|
19
19
|
routeFilePrefix?: string | undefined;
|
|
20
20
|
routeFileIgnorePattern?: string | undefined;
|
|
21
|
-
}>) => VitePlugin<any> | VitePlugin<any>[];
|
|
22
|
-
|
|
21
|
+
}> | undefined) => VitePlugin<any> | VitePlugin<any>[];
|
|
22
|
+
declare const TanStackRouterCodeSplitterVite: (options?: Partial<{
|
|
23
23
|
routeFileIgnorePrefix: string;
|
|
24
24
|
routesDirectory: string;
|
|
25
25
|
generatedRouteTree: string;
|
|
@@ -36,6 +36,7 @@ export declare const TanStackRouterCodeSplitterVite: (options: Partial<{
|
|
|
36
36
|
} | undefined;
|
|
37
37
|
routeFilePrefix?: string | undefined;
|
|
38
38
|
routeFileIgnorePattern?: string | undefined;
|
|
39
|
-
}>) => VitePlugin<any> | VitePlugin<any>[];
|
|
40
|
-
|
|
41
|
-
export
|
|
39
|
+
}> | undefined) => VitePlugin<any> | VitePlugin<any>[];
|
|
40
|
+
declare function TanStackRouterVite(inlineConfig?: Partial<Config>): Array<VitePlugin>;
|
|
41
|
+
export { configSchema, TanStackRouterGeneratorVite, TanStackRouterCodeSplitterVite, TanStackRouterVite, };
|
|
42
|
+
export type { Config };
|
package/dist/esm/vite.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { unpluginRouterCodeSplitter } from "./code-splitter.js";
|
|
2
|
+
import { configSchema } from "./config.js";
|
|
2
3
|
import { unpluginRouterGenerator } from "./router-generator.js";
|
|
3
4
|
const TanStackRouterGeneratorVite = unpluginRouterGenerator.vite;
|
|
4
5
|
const TanStackRouterCodeSplitterVite = unpluginRouterCodeSplitter.vite;
|
|
@@ -11,6 +12,7 @@ function TanStackRouterVite(inlineConfig) {
|
|
|
11
12
|
export {
|
|
12
13
|
TanStackRouterCodeSplitterVite,
|
|
13
14
|
TanStackRouterGeneratorVite,
|
|
14
|
-
TanStackRouterVite
|
|
15
|
+
TanStackRouterVite,
|
|
16
|
+
configSchema
|
|
15
17
|
};
|
|
16
18
|
//# sourceMappingURL=vite.js.map
|
package/dist/esm/vite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.js","sources":["../../src/vite.ts"],"sourcesContent":["import { unpluginRouterCodeSplitter } from './code-splitter'\nimport { unpluginRouterGenerator } from './router-generator'\n\nimport type {
|
|
1
|
+
{"version":3,"file":"vite.js","sources":["../../src/vite.ts"],"sourcesContent":["import { unpluginRouterCodeSplitter } from './code-splitter'\nimport { configSchema } from './config'\nimport { unpluginRouterGenerator } from './router-generator'\n\nimport type { Config } from './config'\nimport type { VitePlugin } from 'unplugin'\n\nconst TanStackRouterGeneratorVite = unpluginRouterGenerator.vite\nconst TanStackRouterCodeSplitterVite = unpluginRouterCodeSplitter.vite\n\nfunction TanStackRouterVite(inlineConfig?: Partial<Config>): Array<VitePlugin> {\n return [\n TanStackRouterGeneratorVite(inlineConfig) as VitePlugin,\n TanStackRouterCodeSplitterVite(inlineConfig) as VitePlugin,\n ]\n}\n\nexport {\n configSchema,\n TanStackRouterGeneratorVite,\n TanStackRouterCodeSplitterVite,\n TanStackRouterVite,\n}\nexport type { Config }\n"],"names":[],"mappings":";;;AAOA,MAAM,8BAA8B,wBAAwB;AAC5D,MAAM,iCAAiC,2BAA2B;AAElE,SAAS,mBAAmB,cAAmD;AACtE,SAAA;AAAA,IACL,4BAA4B,YAAY;AAAA,IACxC,+BAA+B,YAAY;AAAA,EAAA;AAE/C;"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/router-plugin",
|
|
3
|
-
"version": "1.39.
|
|
3
|
+
"version": "1.39.4",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
9
|
"url": "https://github.com/TanStack/router.git",
|
|
10
|
-
"directory": "packages/
|
|
10
|
+
"directory": "packages/router-plugin"
|
|
11
11
|
},
|
|
12
12
|
"homepage": "https://tanstack.com/router",
|
|
13
13
|
"funding": {
|
|
@@ -15,9 +15,6 @@
|
|
|
15
15
|
"url": "https://github.com/sponsors/tannerlinsley"
|
|
16
16
|
},
|
|
17
17
|
"type": "module",
|
|
18
|
-
"types": "dist/esm/index.d.ts",
|
|
19
|
-
"main": "dist/cjs/index.cjs",
|
|
20
|
-
"module": "dist/esm/index.js",
|
|
21
18
|
"exports": {
|
|
22
19
|
".": {
|
|
23
20
|
"import": {
|
package/src/code-splitter.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { compileFile, splitFile } from './compilers'
|
|
|
7
7
|
import { getConfig } from './config'
|
|
8
8
|
import { splitPrefix } from './constants'
|
|
9
9
|
|
|
10
|
-
import type {
|
|
10
|
+
import type { Config } from './config'
|
|
11
11
|
import type { UnpluginFactory } from 'unplugin'
|
|
12
12
|
|
|
13
13
|
function capitalizeFirst(str: string): string {
|
|
@@ -45,14 +45,14 @@ plugins: [
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
export const unpluginFactory: UnpluginFactory<Partial<
|
|
48
|
+
export const unpluginFactory: UnpluginFactory<Partial<Config> | undefined> = (
|
|
49
49
|
options = {},
|
|
50
50
|
{ framework },
|
|
51
51
|
) => {
|
|
52
52
|
const debug = Boolean(process.env.TSR_VITE_DEBUG)
|
|
53
53
|
|
|
54
54
|
let ROOT: string = process.cwd()
|
|
55
|
-
let userConfig = options as
|
|
55
|
+
let userConfig = options as Config
|
|
56
56
|
|
|
57
57
|
const handleSplittingFile = async (code: string, id: string) => {
|
|
58
58
|
const compiledAst = compileAst({
|
|
@@ -128,6 +128,10 @@ export const unpluginFactory: UnpluginFactory<Partial<PluginOptions>> = (
|
|
|
128
128
|
return null
|
|
129
129
|
},
|
|
130
130
|
async transform(code, id) {
|
|
131
|
+
if (!userConfig.experimental?.enableCodeSplitting) {
|
|
132
|
+
return null
|
|
133
|
+
}
|
|
134
|
+
|
|
131
135
|
const url = pathToFileURL(id)
|
|
132
136
|
url.searchParams.delete('v')
|
|
133
137
|
id = fileURLToPath(url).replace(/\\/g, '/')
|
package/src/config.ts
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
getConfig as getGeneratorConfig,
|
|
5
5
|
} from '@tanstack/router-generator'
|
|
6
6
|
|
|
7
|
-
const configSchema = generatorConfigSchema.extend({
|
|
7
|
+
export const configSchema = generatorConfigSchema.extend({
|
|
8
8
|
enableRouteGeneration: z.boolean().optional(),
|
|
9
9
|
experimental: z
|
|
10
10
|
.object({
|
|
@@ -14,7 +14,7 @@ const configSchema = generatorConfigSchema.extend({
|
|
|
14
14
|
})
|
|
15
15
|
|
|
16
16
|
export const getConfig = async (
|
|
17
|
-
inlineConfig: Partial<
|
|
17
|
+
inlineConfig: Partial<Config>,
|
|
18
18
|
root: string,
|
|
19
19
|
) => {
|
|
20
20
|
const config = await getGeneratorConfig(inlineConfig, root)
|
|
@@ -22,4 +22,4 @@ export const getConfig = async (
|
|
|
22
22
|
return configSchema.parse({ ...config, ...inlineConfig })
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
export type
|
|
25
|
+
export type Config = z.infer<typeof configSchema>
|
package/src/index.ts
CHANGED
package/src/router-generator.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { generator } from '@tanstack/router-generator'
|
|
|
4
4
|
|
|
5
5
|
import { getConfig } from './config'
|
|
6
6
|
import { CONFIG_FILE_NAME } from './constants'
|
|
7
|
-
import type {
|
|
7
|
+
import type { Config } from './config'
|
|
8
8
|
import type { UnpluginFactory } from 'unplugin'
|
|
9
9
|
|
|
10
10
|
let lock = false
|
|
@@ -13,11 +13,11 @@ const setLock = (bool: boolean) => {
|
|
|
13
13
|
lock = bool
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
const unpluginFactory: UnpluginFactory<Partial<
|
|
16
|
+
const unpluginFactory: UnpluginFactory<Partial<Config> | undefined> = (
|
|
17
17
|
options = {},
|
|
18
18
|
) => {
|
|
19
19
|
let ROOT: string = process.cwd()
|
|
20
|
-
let userConfig = options as
|
|
20
|
+
let userConfig = options as Config
|
|
21
21
|
|
|
22
22
|
const generate = async () => {
|
|
23
23
|
if (checkLock()) {
|
package/src/vite.ts
CHANGED
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
import { unpluginRouterCodeSplitter } from './code-splitter'
|
|
2
|
+
import { configSchema } from './config'
|
|
2
3
|
import { unpluginRouterGenerator } from './router-generator'
|
|
3
4
|
|
|
4
|
-
import type {
|
|
5
|
+
import type { Config } from './config'
|
|
5
6
|
import type { VitePlugin } from 'unplugin'
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
const TanStackRouterGeneratorVite = unpluginRouterGenerator.vite
|
|
9
|
+
const TanStackRouterCodeSplitterVite = unpluginRouterCodeSplitter.vite
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
inlineConfig: Partial<PluginOptions>,
|
|
12
|
-
): Array<VitePlugin> {
|
|
11
|
+
function TanStackRouterVite(inlineConfig?: Partial<Config>): Array<VitePlugin> {
|
|
13
12
|
return [
|
|
14
13
|
TanStackRouterGeneratorVite(inlineConfig) as VitePlugin,
|
|
15
14
|
TanStackRouterCodeSplitterVite(inlineConfig) as VitePlugin,
|
|
16
15
|
]
|
|
17
16
|
}
|
|
18
17
|
|
|
19
|
-
export
|
|
18
|
+
export {
|
|
19
|
+
configSchema,
|
|
20
|
+
TanStackRouterGeneratorVite,
|
|
21
|
+
TanStackRouterCodeSplitterVite,
|
|
22
|
+
TanStackRouterVite,
|
|
23
|
+
}
|
|
24
|
+
export type { Config }
|