@tanstack/router-plugin 1.132.0-alpha.9 → 1.132.2
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/cjs/core/code-splitter/compilers.cjs +31 -17
- package/dist/cjs/core/code-splitter/compilers.cjs.map +1 -1
- package/dist/cjs/core/config.cjs +1 -4
- package/dist/cjs/core/config.cjs.map +1 -1
- package/dist/cjs/core/config.d.cts +11 -8
- package/dist/cjs/core/route-autoimport-plugin.cjs +17 -6
- package/dist/cjs/core/route-autoimport-plugin.cjs.map +1 -1
- package/dist/cjs/core/route-autoimport-plugin.d.cts +1 -1
- package/dist/cjs/core/router-code-splitter-plugin.cjs +14 -7
- package/dist/cjs/core/router-code-splitter-plugin.cjs.map +1 -1
- package/dist/cjs/core/router-code-splitter-plugin.d.cts +1 -1
- package/dist/cjs/core/router-generator-plugin.cjs +14 -19
- package/dist/cjs/core/router-generator-plugin.cjs.map +1 -1
- package/dist/cjs/core/router-generator-plugin.d.cts +1 -1
- package/dist/cjs/esbuild.cjs.map +1 -1
- package/dist/cjs/esbuild.d.cts +16 -12
- package/dist/cjs/index.d.cts +1 -1
- package/dist/cjs/rspack.cjs.map +1 -1
- package/dist/cjs/rspack.d.cts +16 -12
- package/dist/cjs/vite.cjs.map +1 -1
- package/dist/cjs/vite.d.cts +21 -16
- package/dist/cjs/webpack.cjs.map +1 -1
- package/dist/cjs/webpack.d.cts +16 -12
- package/dist/esm/core/code-splitter/compilers.js +31 -17
- package/dist/esm/core/code-splitter/compilers.js.map +1 -1
- package/dist/esm/core/config.d.ts +11 -8
- package/dist/esm/core/config.js +1 -4
- package/dist/esm/core/config.js.map +1 -1
- package/dist/esm/core/route-autoimport-plugin.d.ts +1 -1
- package/dist/esm/core/route-autoimport-plugin.js +15 -4
- package/dist/esm/core/route-autoimport-plugin.js.map +1 -1
- package/dist/esm/core/router-code-splitter-plugin.d.ts +1 -1
- package/dist/esm/core/router-code-splitter-plugin.js +12 -5
- package/dist/esm/core/router-code-splitter-plugin.js.map +1 -1
- package/dist/esm/core/router-generator-plugin.d.ts +1 -1
- package/dist/esm/core/router-generator-plugin.js +14 -19
- package/dist/esm/core/router-generator-plugin.js.map +1 -1
- package/dist/esm/esbuild.d.ts +16 -12
- package/dist/esm/esbuild.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/rspack.d.ts +16 -12
- package/dist/esm/rspack.js.map +1 -1
- package/dist/esm/vite.d.ts +21 -16
- package/dist/esm/vite.js.map +1 -1
- package/dist/esm/webpack.d.ts +16 -12
- package/dist/esm/webpack.js.map +1 -1
- package/package.json +6 -6
- package/src/core/code-splitter/compilers.ts +45 -23
- package/src/core/config.ts +11 -5
- package/src/core/route-autoimport-plugin.ts +16 -5
- package/src/core/router-code-splitter-plugin.ts +14 -6
- package/src/core/router-generator-plugin.ts +14 -19
- package/src/esbuild.ts +2 -2
- package/src/index.ts +7 -1
- package/src/rspack.ts +2 -2
- package/src/vite.ts +3 -2
- package/src/webpack.ts +2 -2
|
@@ -5,7 +5,14 @@ import { getConfig } from "./config.js";
|
|
|
5
5
|
import { debug } from "./utils.js";
|
|
6
6
|
const unpluginRouteAutoImportFactory = (options = {}) => {
|
|
7
7
|
let ROOT = process.cwd();
|
|
8
|
-
let userConfig
|
|
8
|
+
let userConfig;
|
|
9
|
+
function initUserConfig() {
|
|
10
|
+
if (typeof options === "function") {
|
|
11
|
+
userConfig = options();
|
|
12
|
+
} else {
|
|
13
|
+
userConfig = getConfig(options, ROOT);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
9
16
|
return {
|
|
10
17
|
name: "tanstack-router:autoimport",
|
|
11
18
|
enforce: "pre",
|
|
@@ -69,16 +76,20 @@ const unpluginRouteAutoImportFactory = (options = {}) => {
|
|
|
69
76
|
vite: {
|
|
70
77
|
configResolved(config) {
|
|
71
78
|
ROOT = config.root;
|
|
72
|
-
|
|
79
|
+
initUserConfig();
|
|
80
|
+
},
|
|
81
|
+
// this check may only happen after config is resolved, so we use applyToEnvironment (apply is too early)
|
|
82
|
+
applyToEnvironment() {
|
|
83
|
+
return userConfig.verboseFileRoutes === false;
|
|
73
84
|
}
|
|
74
85
|
},
|
|
75
86
|
rspack() {
|
|
76
87
|
ROOT = process.cwd();
|
|
77
|
-
|
|
88
|
+
initUserConfig();
|
|
78
89
|
},
|
|
79
90
|
webpack() {
|
|
80
91
|
ROOT = process.cwd();
|
|
81
|
-
|
|
92
|
+
initUserConfig();
|
|
82
93
|
}
|
|
83
94
|
};
|
|
84
95
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-autoimport-plugin.js","sources":["../../../src/core/route-autoimport-plugin.ts"],"sourcesContent":["import { generateFromAst, logDiff, parseAst } from '@tanstack/router-utils'\nimport babel from '@babel/core'\nimport * as template from '@babel/template'\nimport { getConfig } from './config'\nimport { debug } from './utils'\nimport type { Config } from './config'\nimport type { UnpluginFactory } from 'unplugin'\n\n/**\n * This plugin adds imports for createFileRoute and createLazyFileRoute to the file route.\n */\nexport const unpluginRouteAutoImportFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}) => {\n let ROOT: string = process.cwd()\n let userConfig = options
|
|
1
|
+
{"version":3,"file":"route-autoimport-plugin.js","sources":["../../../src/core/route-autoimport-plugin.ts"],"sourcesContent":["import { generateFromAst, logDiff, parseAst } from '@tanstack/router-utils'\nimport babel from '@babel/core'\nimport * as template from '@babel/template'\nimport { getConfig } from './config'\nimport { debug } from './utils'\nimport type { Config } from './config'\nimport type { UnpluginFactory } from 'unplugin'\n\n/**\n * This plugin adds imports for createFileRoute and createLazyFileRoute to the file route.\n */\nexport const unpluginRouteAutoImportFactory: UnpluginFactory<\n Partial<Config | (() => Config)> | undefined\n> = (options = {}) => {\n let ROOT: string = process.cwd()\n let userConfig: Config\n\n function initUserConfig() {\n if (typeof options === 'function') {\n userConfig = options()\n } else {\n userConfig = getConfig(options, ROOT)\n }\n }\n return {\n name: 'tanstack-router:autoimport',\n enforce: 'pre',\n\n transform: {\n filter: {\n // this is necessary for webpack / rspack to avoid matching .html files\n id: /\\.(m|c)?(j|t)sx?$/,\n code: /createFileRoute\\(|createLazyFileRoute\\(/,\n },\n handler(code, id) {\n if (!globalThis.TSR_ROUTES_BY_ID_MAP?.has(id)) {\n return null\n }\n let routeType: 'createFileRoute' | 'createLazyFileRoute'\n if (code.includes('createFileRoute(')) {\n routeType = 'createFileRoute'\n } else if (code.includes('createLazyFileRoute(')) {\n routeType = 'createLazyFileRoute'\n } else {\n return null\n }\n\n const routerImportPath = `@tanstack/${userConfig.target}-router`\n\n const ast = parseAst({ code })\n\n let isCreateRouteFunctionImported = false as boolean\n\n babel.traverse(ast, {\n Program: {\n enter(programPath) {\n programPath.traverse({\n ImportDeclaration(path) {\n const importedSpecifiers = path.node.specifiers.map(\n (specifier) => specifier.local.name,\n )\n if (\n importedSpecifiers.includes(routeType) &&\n path.node.source.value === routerImportPath\n ) {\n isCreateRouteFunctionImported = true\n }\n },\n })\n },\n },\n })\n\n if (!isCreateRouteFunctionImported) {\n if (debug) console.info('Adding autoimports to route ', id)\n\n const autoImportStatement = template.statement(\n `import { ${routeType} } from '${routerImportPath}'`,\n )()\n ast.program.body.unshift(autoImportStatement)\n\n const result = generateFromAst(ast, {\n sourceMaps: true,\n filename: id,\n sourceFileName: id,\n })\n if (debug) {\n logDiff(code, result.code)\n console.log('Output:\\n', result.code + '\\n\\n')\n }\n return result\n }\n\n return null\n },\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n initUserConfig()\n },\n // this check may only happen after config is resolved, so we use applyToEnvironment (apply is too early)\n applyToEnvironment() {\n return userConfig.verboseFileRoutes === false\n },\n },\n\n rspack() {\n ROOT = process.cwd()\n initUserConfig()\n },\n\n webpack() {\n ROOT = process.cwd()\n initUserConfig()\n },\n }\n}\n"],"names":[],"mappings":";;;;;AAWO,MAAM,iCAET,CAAC,UAAU,OAAO;AACpB,MAAI,OAAe,QAAQ,IAAA;AAC3B,MAAI;AAEJ,WAAS,iBAAiB;AACxB,QAAI,OAAO,YAAY,YAAY;AACjC,mBAAa,QAAA;AAAA,IACf,OAAO;AACL,mBAAa,UAAU,SAAS,IAAI;AAAA,IACtC;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IAET,WAAW;AAAA,MACT,QAAQ;AAAA;AAAA,QAEN,IAAI;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,MAER,QAAQ,MAAM,IAAI;AAChB,YAAI,CAAC,WAAW,sBAAsB,IAAI,EAAE,GAAG;AAC7C,iBAAO;AAAA,QACT;AACA,YAAI;AACJ,YAAI,KAAK,SAAS,kBAAkB,GAAG;AACrC,sBAAY;AAAA,QACd,WAAW,KAAK,SAAS,sBAAsB,GAAG;AAChD,sBAAY;AAAA,QACd,OAAO;AACL,iBAAO;AAAA,QACT;AAEA,cAAM,mBAAmB,aAAa,WAAW,MAAM;AAEvD,cAAM,MAAM,SAAS,EAAE,MAAM;AAE7B,YAAI,gCAAgC;AAEpC,cAAM,SAAS,KAAK;AAAA,UAClB,SAAS;AAAA,YACP,MAAM,aAAa;AACjB,0BAAY,SAAS;AAAA,gBACnB,kBAAkB,MAAM;AACtB,wBAAM,qBAAqB,KAAK,KAAK,WAAW;AAAA,oBAC9C,CAAC,cAAc,UAAU,MAAM;AAAA,kBAAA;AAEjC,sBACE,mBAAmB,SAAS,SAAS,KACrC,KAAK,KAAK,OAAO,UAAU,kBAC3B;AACA,oDAAgC;AAAA,kBAClC;AAAA,gBACF;AAAA,cAAA,CACD;AAAA,YACH;AAAA,UAAA;AAAA,QACF,CACD;AAED,YAAI,CAAC,+BAA+B;AAClC,cAAI,MAAO,SAAQ,KAAK,gCAAgC,EAAE;AAE1D,gBAAM,sBAAsB,SAAS;AAAA,YACnC,YAAY,SAAS,YAAY,gBAAgB;AAAA,UAAA,EACnD;AACA,cAAI,QAAQ,KAAK,QAAQ,mBAAmB;AAE5C,gBAAM,SAAS,gBAAgB,KAAK;AAAA,YAClC,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,gBAAgB;AAAA,UAAA,CACjB;AACD,cAAI,OAAO;AACT,oBAAQ,MAAM,OAAO,IAAI;AACzB,oBAAQ,IAAI,aAAa,OAAO,OAAO,MAAM;AAAA,UAC/C;AACA,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,IAAA;AAAA,IAGF,MAAM;AAAA,MACJ,eAAe,QAAQ;AACrB,eAAO,OAAO;AACd,uBAAA;AAAA,MACF;AAAA;AAAA,MAEA,qBAAqB;AACnB,eAAO,WAAW,sBAAsB;AAAA,MAC1C;AAAA,IAAA;AAAA,IAGF,SAAS;AACP,aAAO,QAAQ,IAAA;AACf,qBAAA;AAAA,IACF;AAAA,IAEA,UAAU;AACR,aAAO,QAAQ,IAAA;AACf,qBAAA;AAAA,IACF;AAAA,EAAA;AAEJ;"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Config } from './config.js';
|
|
2
2
|
import { UnpluginFactory } from 'unplugin';
|
|
3
|
-
export declare const unpluginRouterCodeSplitterFactory: UnpluginFactory<Partial<Config> | undefined>;
|
|
3
|
+
export declare const unpluginRouterCodeSplitterFactory: UnpluginFactory<Partial<Config | (() => Config)> | undefined>;
|
|
@@ -27,7 +27,14 @@ plugins: [
|
|
|
27
27
|
const PLUGIN_NAME = "unplugin:router-code-splitter";
|
|
28
28
|
const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
|
|
29
29
|
let ROOT = process.cwd();
|
|
30
|
-
let userConfig
|
|
30
|
+
let userConfig;
|
|
31
|
+
function initUserConfig() {
|
|
32
|
+
if (typeof options === "function") {
|
|
33
|
+
userConfig = options();
|
|
34
|
+
} else {
|
|
35
|
+
userConfig = getConfig(options, ROOT);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
31
38
|
const isProduction = process.env.NODE_ENV === "production";
|
|
32
39
|
const getGlobalCodeSplitGroupings = () => {
|
|
33
40
|
return userConfig.codeSplittingOptions?.defaultBehavior || defaultCodeSplitGroupings;
|
|
@@ -72,7 +79,7 @@ ${message}`
|
|
|
72
79
|
filename: id,
|
|
73
80
|
id,
|
|
74
81
|
deleteNodes: new Set(userConfig.codeSplittingOptions?.deleteNodes),
|
|
75
|
-
addHmr: (
|
|
82
|
+
addHmr: (userConfig.codeSplittingOptions?.addHmr ?? true) && !isProduction
|
|
76
83
|
});
|
|
77
84
|
if (debug) {
|
|
78
85
|
logDiff(code, compiledReferenceRoute.code);
|
|
@@ -144,7 +151,7 @@ ${message}`
|
|
|
144
151
|
vite: {
|
|
145
152
|
configResolved(config) {
|
|
146
153
|
ROOT = config.root;
|
|
147
|
-
|
|
154
|
+
initUserConfig();
|
|
148
155
|
},
|
|
149
156
|
applyToEnvironment(environment) {
|
|
150
157
|
if (userConfig.plugin?.vite?.environmentName) {
|
|
@@ -155,11 +162,11 @@ ${message}`
|
|
|
155
162
|
},
|
|
156
163
|
rspack() {
|
|
157
164
|
ROOT = process.cwd();
|
|
158
|
-
|
|
165
|
+
initUserConfig();
|
|
159
166
|
},
|
|
160
167
|
webpack(compiler) {
|
|
161
168
|
ROOT = process.cwd();
|
|
162
|
-
|
|
169
|
+
initUserConfig();
|
|
163
170
|
if (compiler.options.mode === "production") {
|
|
164
171
|
compiler.hooks.done.tap(PLUGIN_NAME, () => {
|
|
165
172
|
console.info("✅ " + PLUGIN_NAME + ": code-splitting done!");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-code-splitter-plugin.js","sources":["../../../src/core/router-code-splitter-plugin.ts"],"sourcesContent":["/**\n * It is important to familiarize yourself with how the code-splitting works in this plugin.\n * https://github.com/TanStack/router/pull/3355\n */\n\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { logDiff } from '@tanstack/router-utils'\nimport { getConfig, splitGroupingsSchema } from './config'\nimport {\n compileCodeSplitReferenceRoute,\n compileCodeSplitVirtualRoute,\n detectCodeSplitGroupingsFromRoute,\n} from './code-splitter/compilers'\nimport {\n defaultCodeSplitGroupings,\n splitRouteIdentNodes,\n tsrSplit,\n} from './constants'\nimport { decodeIdentifier } from './code-splitter/path-ids'\nimport { debug } from './utils'\nimport type { CodeSplitGroupings, SplitRouteIdentNodes } from './constants'\nimport type { GetRoutesByFileMapResultValue } from '@tanstack/router-generator'\nimport type { Config } from './config'\nimport type {\n UnpluginContextMeta,\n UnpluginFactory,\n TransformResult as UnpluginTransformResult,\n} from 'unplugin'\n\ntype BannedBeforeExternalPlugin = {\n identifier: string\n pkg: string\n usage: string\n frameworks: Array<UnpluginContextMeta['framework']>\n}\n\nconst bannedBeforeExternalPlugins: Array<BannedBeforeExternalPlugin> = [\n {\n identifier: '@react-refresh',\n pkg: '@vitejs/plugin-react',\n usage: 'viteReact()',\n frameworks: ['vite'],\n },\n]\n\nclass FoundPluginInBeforeCode extends Error {\n constructor(\n externalPlugin: BannedBeforeExternalPlugin,\n pluginFramework: string,\n ) {\n super(`We detected that the '${externalPlugin.pkg}' was passed before '@tanstack/router-plugin/${pluginFramework}'. Please make sure that '@tanstack/router-plugin' is passed before '${externalPlugin.pkg}' and try again: \ne.g.\nplugins: [\n tanstackRouter(), // Place this before ${externalPlugin.usage}\n ${externalPlugin.usage},\n]\n`)\n }\n}\n\nconst PLUGIN_NAME = 'unplugin:router-code-splitter'\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}, { framework }) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const isProduction = process.env.NODE_ENV === 'production'\n\n const getGlobalCodeSplitGroupings = () => {\n return (\n userConfig.codeSplittingOptions?.defaultBehavior ||\n defaultCodeSplitGroupings\n )\n }\n const getShouldSplitFn = () => {\n return userConfig.codeSplittingOptions?.splitBehavior\n }\n\n const handleCompilingReferenceFile = (\n code: string,\n id: string,\n generatorNodeInfo: GetRoutesByFileMapResultValue,\n ): UnpluginTransformResult => {\n if (debug) console.info('Compiling Route: ', id)\n\n const fromCode = detectCodeSplitGroupingsFromRoute({\n code,\n })\n\n if (fromCode.groupings) {\n const res = splitGroupingsSchema.safeParse(fromCode.groupings)\n if (!res.success) {\n const message = res.error.errors.map((e) => e.message).join('. ')\n throw new Error(\n `The groupings for the route \"${id}\" are invalid.\\n${message}`,\n )\n }\n }\n\n const userShouldSplitFn = getShouldSplitFn()\n\n const pluginSplitBehavior = userShouldSplitFn?.({\n routeId: generatorNodeInfo.routePath,\n }) as CodeSplitGroupings | undefined\n\n if (pluginSplitBehavior) {\n const res = splitGroupingsSchema.safeParse(pluginSplitBehavior)\n if (!res.success) {\n const message = res.error.errors.map((e) => e.message).join('. ')\n throw new Error(\n `The groupings returned when using \\`splitBehavior\\` for the route \"${id}\" are invalid.\\n${message}`,\n )\n }\n }\n\n const splitGroupings: CodeSplitGroupings =\n fromCode.groupings || pluginSplitBehavior || getGlobalCodeSplitGroupings()\n\n const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n codeSplitGroupings: splitGroupings,\n targetFramework: userConfig.target,\n filename: id,\n id,\n deleteNodes: new Set(userConfig.codeSplittingOptions?.deleteNodes),\n addHmr: (options.codeSplittingOptions?.addHmr ?? true) && !isProduction,\n })\n\n if (debug) {\n logDiff(code, compiledReferenceRoute.code)\n console.log('Output:\\n', compiledReferenceRoute.code + '\\n\\n')\n }\n\n return compiledReferenceRoute\n }\n\n const handleCompilingVirtualFile = (\n code: string,\n id: string,\n ): UnpluginTransformResult => {\n if (debug) console.info('Splitting Route: ', id)\n\n const [_, ...pathnameParts] = id.split('?')\n\n const searchParams = new URLSearchParams(pathnameParts.join('?'))\n const splitValue = searchParams.get(tsrSplit)\n\n if (!splitValue) {\n throw new Error(\n `The split value for the virtual route \"${id}\" was not found.`,\n )\n }\n\n const rawGrouping = decodeIdentifier(splitValue)\n const grouping = [...new Set(rawGrouping)].filter((p) =>\n splitRouteIdentNodes.includes(p as any),\n ) as Array<SplitRouteIdentNodes>\n\n const result = compileCodeSplitVirtualRoute({\n code,\n filename: id,\n splitTargets: grouping,\n })\n\n if (debug) {\n logDiff(code, result.code)\n console.log('Output:\\n', result.code + '\\n\\n')\n }\n\n return result\n }\n\n const includedCode = [\n 'createFileRoute(',\n 'createRootRoute(',\n 'createRootRouteWithContext(',\n ]\n return [\n {\n name: 'tanstack-router:code-splitter:compile-reference-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: {\n exclude: tsrSplit,\n // this is necessary for webpack / rspack to avoid matching .html files\n include: /\\.(m|c)?(j|t)sx?$/,\n },\n code: {\n include: includedCode,\n },\n },\n handler(code, id) {\n const generatorFileInfo = globalThis.TSR_ROUTES_BY_ID_MAP?.get(id)\n if (\n generatorFileInfo &&\n includedCode.some((included) => code.includes(included))\n ) {\n for (const externalPlugin of bannedBeforeExternalPlugins) {\n if (!externalPlugin.frameworks.includes(framework)) {\n continue\n }\n\n if (code.includes(externalPlugin.identifier)) {\n throw new FoundPluginInBeforeCode(externalPlugin, framework)\n }\n }\n\n return handleCompilingReferenceFile(code, id, generatorFileInfo)\n }\n\n return null\n },\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n userConfig = getConfig(options, ROOT)\n },\n applyToEnvironment(environment) {\n if (userConfig.plugin?.vite?.environmentName) {\n return userConfig.plugin.vite.environmentName === environment.name\n }\n return true\n },\n },\n\n rspack() {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n },\n\n webpack(compiler) {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n\n if (compiler.options.mode === 'production') {\n compiler.hooks.done.tap(PLUGIN_NAME, () => {\n console.info('✅ ' + PLUGIN_NAME + ': code-splitting done!')\n setTimeout(() => {\n process.exit(0)\n })\n })\n }\n },\n },\n {\n name: 'tanstack-router:code-splitter:compile-virtual-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: /tsr-split/,\n },\n handler(code, id) {\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n id = fileURLToPath(url).replace(/\\\\/g, '/')\n return handleCompilingVirtualFile(code, id)\n },\n },\n },\n ]\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router-code-splitter-plugin.js","sources":["../../../src/core/router-code-splitter-plugin.ts"],"sourcesContent":["/**\n * It is important to familiarize yourself with how the code-splitting works in this plugin.\n * https://github.com/TanStack/router/pull/3355\n */\n\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { logDiff } from '@tanstack/router-utils'\nimport { getConfig, splitGroupingsSchema } from './config'\nimport {\n compileCodeSplitReferenceRoute,\n compileCodeSplitVirtualRoute,\n detectCodeSplitGroupingsFromRoute,\n} from './code-splitter/compilers'\nimport {\n defaultCodeSplitGroupings,\n splitRouteIdentNodes,\n tsrSplit,\n} from './constants'\nimport { decodeIdentifier } from './code-splitter/path-ids'\nimport { debug } from './utils'\nimport type { CodeSplitGroupings, SplitRouteIdentNodes } from './constants'\nimport type { GetRoutesByFileMapResultValue } from '@tanstack/router-generator'\nimport type { Config } from './config'\nimport type {\n UnpluginContextMeta,\n UnpluginFactory,\n TransformResult as UnpluginTransformResult,\n} from 'unplugin'\n\ntype BannedBeforeExternalPlugin = {\n identifier: string\n pkg: string\n usage: string\n frameworks: Array<UnpluginContextMeta['framework']>\n}\n\nconst bannedBeforeExternalPlugins: Array<BannedBeforeExternalPlugin> = [\n {\n identifier: '@react-refresh',\n pkg: '@vitejs/plugin-react',\n usage: 'viteReact()',\n frameworks: ['vite'],\n },\n]\n\nclass FoundPluginInBeforeCode extends Error {\n constructor(\n externalPlugin: BannedBeforeExternalPlugin,\n pluginFramework: string,\n ) {\n super(`We detected that the '${externalPlugin.pkg}' was passed before '@tanstack/router-plugin/${pluginFramework}'. Please make sure that '@tanstack/router-plugin' is passed before '${externalPlugin.pkg}' and try again: \ne.g.\nplugins: [\n tanstackRouter(), // Place this before ${externalPlugin.usage}\n ${externalPlugin.usage},\n]\n`)\n }\n}\n\nconst PLUGIN_NAME = 'unplugin:router-code-splitter'\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config | (() => Config)> | undefined\n> = (options = {}, { framework }) => {\n let ROOT: string = process.cwd()\n let userConfig: Config\n\n function initUserConfig() {\n if (typeof options === 'function') {\n userConfig = options()\n } else {\n userConfig = getConfig(options, ROOT)\n }\n }\n const isProduction = process.env.NODE_ENV === 'production'\n\n const getGlobalCodeSplitGroupings = () => {\n return (\n userConfig.codeSplittingOptions?.defaultBehavior ||\n defaultCodeSplitGroupings\n )\n }\n const getShouldSplitFn = () => {\n return userConfig.codeSplittingOptions?.splitBehavior\n }\n\n const handleCompilingReferenceFile = (\n code: string,\n id: string,\n generatorNodeInfo: GetRoutesByFileMapResultValue,\n ): UnpluginTransformResult => {\n if (debug) console.info('Compiling Route: ', id)\n\n const fromCode = detectCodeSplitGroupingsFromRoute({\n code,\n })\n\n if (fromCode.groupings) {\n const res = splitGroupingsSchema.safeParse(fromCode.groupings)\n if (!res.success) {\n const message = res.error.errors.map((e) => e.message).join('. ')\n throw new Error(\n `The groupings for the route \"${id}\" are invalid.\\n${message}`,\n )\n }\n }\n\n const userShouldSplitFn = getShouldSplitFn()\n\n const pluginSplitBehavior = userShouldSplitFn?.({\n routeId: generatorNodeInfo.routePath,\n }) as CodeSplitGroupings | undefined\n\n if (pluginSplitBehavior) {\n const res = splitGroupingsSchema.safeParse(pluginSplitBehavior)\n if (!res.success) {\n const message = res.error.errors.map((e) => e.message).join('. ')\n throw new Error(\n `The groupings returned when using \\`splitBehavior\\` for the route \"${id}\" are invalid.\\n${message}`,\n )\n }\n }\n\n const splitGroupings: CodeSplitGroupings =\n fromCode.groupings || pluginSplitBehavior || getGlobalCodeSplitGroupings()\n\n const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n codeSplitGroupings: splitGroupings,\n targetFramework: userConfig.target,\n filename: id,\n id,\n deleteNodes: new Set(userConfig.codeSplittingOptions?.deleteNodes),\n addHmr:\n (userConfig.codeSplittingOptions?.addHmr ?? true) && !isProduction,\n })\n\n if (debug) {\n logDiff(code, compiledReferenceRoute.code)\n console.log('Output:\\n', compiledReferenceRoute.code + '\\n\\n')\n }\n\n return compiledReferenceRoute\n }\n\n const handleCompilingVirtualFile = (\n code: string,\n id: string,\n ): UnpluginTransformResult => {\n if (debug) console.info('Splitting Route: ', id)\n\n const [_, ...pathnameParts] = id.split('?')\n\n const searchParams = new URLSearchParams(pathnameParts.join('?'))\n const splitValue = searchParams.get(tsrSplit)\n\n if (!splitValue) {\n throw new Error(\n `The split value for the virtual route \"${id}\" was not found.`,\n )\n }\n\n const rawGrouping = decodeIdentifier(splitValue)\n const grouping = [...new Set(rawGrouping)].filter((p) =>\n splitRouteIdentNodes.includes(p as any),\n ) as Array<SplitRouteIdentNodes>\n\n const result = compileCodeSplitVirtualRoute({\n code,\n filename: id,\n splitTargets: grouping,\n })\n\n if (debug) {\n logDiff(code, result.code)\n console.log('Output:\\n', result.code + '\\n\\n')\n }\n\n return result\n }\n\n const includedCode = [\n 'createFileRoute(',\n 'createRootRoute(',\n 'createRootRouteWithContext(',\n ]\n return [\n {\n name: 'tanstack-router:code-splitter:compile-reference-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: {\n exclude: tsrSplit,\n // this is necessary for webpack / rspack to avoid matching .html files\n include: /\\.(m|c)?(j|t)sx?$/,\n },\n code: {\n include: includedCode,\n },\n },\n handler(code, id) {\n const generatorFileInfo = globalThis.TSR_ROUTES_BY_ID_MAP?.get(id)\n if (\n generatorFileInfo &&\n includedCode.some((included) => code.includes(included))\n ) {\n for (const externalPlugin of bannedBeforeExternalPlugins) {\n if (!externalPlugin.frameworks.includes(framework)) {\n continue\n }\n\n if (code.includes(externalPlugin.identifier)) {\n throw new FoundPluginInBeforeCode(externalPlugin, framework)\n }\n }\n\n return handleCompilingReferenceFile(code, id, generatorFileInfo)\n }\n\n return null\n },\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n initUserConfig()\n },\n applyToEnvironment(environment) {\n if (userConfig.plugin?.vite?.environmentName) {\n return userConfig.plugin.vite.environmentName === environment.name\n }\n return true\n },\n },\n\n rspack() {\n ROOT = process.cwd()\n initUserConfig()\n },\n\n webpack(compiler) {\n ROOT = process.cwd()\n initUserConfig()\n\n if (compiler.options.mode === 'production') {\n compiler.hooks.done.tap(PLUGIN_NAME, () => {\n console.info('✅ ' + PLUGIN_NAME + ': code-splitting done!')\n setTimeout(() => {\n process.exit(0)\n })\n })\n }\n },\n },\n {\n name: 'tanstack-router:code-splitter:compile-virtual-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: /tsr-split/,\n },\n handler(code, id) {\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n id = fileURLToPath(url).replace(/\\\\/g, '/')\n return handleCompilingVirtualFile(code, id)\n },\n },\n },\n ]\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { UnpluginFactory } from 'unplugin';
|
|
2
2
|
import { Config } from './config.js';
|
|
3
|
-
export declare const unpluginRouterGeneratorFactory: UnpluginFactory<Partial<Config> | undefined>;
|
|
3
|
+
export declare const unpluginRouterGeneratorFactory: UnpluginFactory<Partial<Config | (() => Config)> | undefined>;
|
|
@@ -3,15 +3,22 @@ import { Generator, resolveConfigPath } from "@tanstack/router-generator";
|
|
|
3
3
|
import { getConfig } from "./config.js";
|
|
4
4
|
const PLUGIN_NAME = "unplugin:router-generator";
|
|
5
5
|
const unpluginRouterGeneratorFactory = (options = {}) => {
|
|
6
|
-
|
|
7
|
-
let userConfig
|
|
6
|
+
let ROOT = process.cwd();
|
|
7
|
+
let userConfig;
|
|
8
8
|
let generator;
|
|
9
9
|
const routeGenerationDisabled = () => userConfig.enableRouteGeneration === false;
|
|
10
10
|
const getRoutesDirectoryPath = () => {
|
|
11
11
|
return isAbsolute(userConfig.routesDirectory) ? userConfig.routesDirectory : join(ROOT, userConfig.routesDirectory);
|
|
12
12
|
};
|
|
13
|
-
const initConfigAndGenerator = () => {
|
|
14
|
-
|
|
13
|
+
const initConfigAndGenerator = (opts) => {
|
|
14
|
+
if (opts?.root) {
|
|
15
|
+
ROOT = opts.root;
|
|
16
|
+
}
|
|
17
|
+
if (typeof options === "function") {
|
|
18
|
+
userConfig = options();
|
|
19
|
+
} else {
|
|
20
|
+
userConfig = getConfig(options, ROOT);
|
|
21
|
+
}
|
|
15
22
|
generator = new Generator({
|
|
16
23
|
config: userConfig,
|
|
17
24
|
root: ROOT
|
|
@@ -46,23 +53,11 @@ const unpluginRouterGeneratorFactory = (options = {}) => {
|
|
|
46
53
|
event
|
|
47
54
|
});
|
|
48
55
|
},
|
|
49
|
-
async buildStart() {
|
|
50
|
-
await generate();
|
|
51
|
-
},
|
|
52
56
|
vite: {
|
|
53
|
-
configResolved() {
|
|
54
|
-
initConfigAndGenerator();
|
|
55
|
-
},
|
|
56
|
-
applyToEnvironment(environment) {
|
|
57
|
-
if (userConfig.plugin?.vite?.environmentName) {
|
|
58
|
-
return userConfig.plugin.vite.environmentName === environment.name;
|
|
59
|
-
}
|
|
60
|
-
return true;
|
|
61
|
-
},
|
|
62
|
-
async buildStart() {
|
|
57
|
+
async configResolved(config) {
|
|
58
|
+
initConfigAndGenerator({ root: config.root });
|
|
63
59
|
await generate();
|
|
64
|
-
}
|
|
65
|
-
sharedDuringBuild: true
|
|
60
|
+
}
|
|
66
61
|
},
|
|
67
62
|
rspack(compiler) {
|
|
68
63
|
initConfigAndGenerator();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-generator-plugin.js","sources":["../../../src/core/router-generator-plugin.ts"],"sourcesContent":["import { isAbsolute, join, normalize } from 'node:path'\nimport { Generator, resolveConfigPath } from '@tanstack/router-generator'\nimport { getConfig } from './config'\n\nimport type { GeneratorEvent } from '@tanstack/router-generator'\nimport type { FSWatcher } from 'chokidar'\nimport type { UnpluginFactory } from 'unplugin'\nimport type { Config } from './config'\n\nconst PLUGIN_NAME = 'unplugin:router-generator'\n\nexport const unpluginRouterGeneratorFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}) => {\n
|
|
1
|
+
{"version":3,"file":"router-generator-plugin.js","sources":["../../../src/core/router-generator-plugin.ts"],"sourcesContent":["import { isAbsolute, join, normalize } from 'node:path'\nimport { Generator, resolveConfigPath } from '@tanstack/router-generator'\nimport { getConfig } from './config'\n\nimport type { GeneratorEvent } from '@tanstack/router-generator'\nimport type { FSWatcher } from 'chokidar'\nimport type { UnpluginFactory } from 'unplugin'\nimport type { Config } from './config'\n\nconst PLUGIN_NAME = 'unplugin:router-generator'\n\nexport const unpluginRouterGeneratorFactory: UnpluginFactory<\n Partial<Config | (() => Config)> | undefined\n> = (options = {}) => {\n let ROOT: string = process.cwd()\n let userConfig: Config\n let generator: Generator\n\n const routeGenerationDisabled = () =>\n userConfig.enableRouteGeneration === false\n const getRoutesDirectoryPath = () => {\n return isAbsolute(userConfig.routesDirectory)\n ? userConfig.routesDirectory\n : join(ROOT, userConfig.routesDirectory)\n }\n\n const initConfigAndGenerator = (opts?: { root?: string }) => {\n if (opts?.root) {\n ROOT = opts.root\n }\n if (typeof options === 'function') {\n userConfig = options()\n } else {\n userConfig = getConfig(options, ROOT)\n }\n generator = new Generator({\n config: userConfig,\n root: ROOT,\n })\n }\n\n const generate = async (opts?: {\n file: string\n event: 'create' | 'update' | 'delete'\n }) => {\n if (routeGenerationDisabled()) {\n return\n }\n let generatorEvent: GeneratorEvent | undefined = undefined\n if (opts) {\n const filePath = normalize(opts.file)\n if (filePath === resolveConfigPath({ configDirectory: ROOT })) {\n initConfigAndGenerator()\n return\n }\n generatorEvent = { path: filePath, type: opts.event }\n }\n\n try {\n await generator.run(generatorEvent)\n globalThis.TSR_ROUTES_BY_ID_MAP = generator.getRoutesByFileMap()\n } catch (e) {\n console.error(e)\n }\n }\n\n return {\n name: 'tanstack:router-generator',\n enforce: 'pre',\n async watchChange(id, { event }) {\n await generate({\n file: id,\n event,\n })\n },\n vite: {\n async configResolved(config) {\n initConfigAndGenerator({ root: config.root })\n await generate()\n },\n },\n rspack(compiler) {\n initConfigAndGenerator()\n\n let handle: FSWatcher | null = null\n\n compiler.hooks.beforeRun.tapPromise(PLUGIN_NAME, () => generate())\n\n compiler.hooks.watchRun.tapPromise(PLUGIN_NAME, async () => {\n if (handle) {\n return\n }\n\n // rspack watcher doesn't register newly created files\n const routesDirectoryPath = getRoutesDirectoryPath()\n const chokidar = await import('chokidar')\n handle = chokidar\n .watch(routesDirectoryPath, { ignoreInitial: true })\n .on('add', (file) => generate({ file, event: 'create' }))\n\n await generate()\n })\n\n compiler.hooks.watchClose.tap(PLUGIN_NAME, async () => {\n if (handle) {\n await handle.close()\n }\n })\n },\n webpack(compiler) {\n initConfigAndGenerator()\n\n let handle: FSWatcher | null = null\n\n compiler.hooks.beforeRun.tapPromise(PLUGIN_NAME, () => generate())\n\n compiler.hooks.watchRun.tapPromise(PLUGIN_NAME, async () => {\n if (handle) {\n return\n }\n\n // webpack watcher doesn't register newly created files\n const routesDirectoryPath = getRoutesDirectoryPath()\n const chokidar = await import('chokidar')\n handle = chokidar\n .watch(routesDirectoryPath, { ignoreInitial: true })\n .on('add', (file) => generate({ file, event: 'create' }))\n\n await generate()\n })\n\n compiler.hooks.watchClose.tap(PLUGIN_NAME, async () => {\n if (handle) {\n await handle.close()\n }\n })\n\n compiler.hooks.done.tap(PLUGIN_NAME, () => {\n console.info('✅ ' + PLUGIN_NAME + ': route-tree generation done')\n })\n },\n esbuild: {\n config() {\n initConfigAndGenerator()\n },\n },\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/esbuild.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { configSchema, Config } from './core/config.js';
|
|
1
|
+
import { configSchema, CodeSplittingOptions, Config } from './core/config.js';
|
|
2
2
|
/**
|
|
3
3
|
* @example
|
|
4
4
|
* ```ts
|
|
@@ -22,10 +22,10 @@ declare const TanStackRouterGeneratorEsbuild: (options?: Partial<{
|
|
|
22
22
|
disableTypes: boolean;
|
|
23
23
|
addExtensions: boolean;
|
|
24
24
|
enableRouteTreeFormatting: boolean;
|
|
25
|
-
routeTreeFileFooter: string[];
|
|
26
25
|
tmpDir: string;
|
|
26
|
+
importRoutesUsingAbsolutePaths: boolean;
|
|
27
27
|
enableRouteGeneration?: boolean | undefined;
|
|
28
|
-
codeSplittingOptions?:
|
|
28
|
+
codeSplittingOptions?: CodeSplittingOptions | undefined;
|
|
29
29
|
plugin?: {
|
|
30
30
|
vite?: {
|
|
31
31
|
environmentName?: string | undefined;
|
|
@@ -36,6 +36,7 @@ declare const TanStackRouterGeneratorEsbuild: (options?: Partial<{
|
|
|
36
36
|
routeFileIgnorePattern?: string | undefined;
|
|
37
37
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
38
38
|
verboseFileRoutes?: boolean | undefined;
|
|
39
|
+
routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined;
|
|
39
40
|
autoCodeSplitting?: boolean | undefined;
|
|
40
41
|
customScaffolding?: {
|
|
41
42
|
routeTemplate?: string | undefined;
|
|
@@ -45,7 +46,7 @@ declare const TanStackRouterGeneratorEsbuild: (options?: Partial<{
|
|
|
45
46
|
enableCodeSplitting?: boolean | undefined;
|
|
46
47
|
} | undefined;
|
|
47
48
|
plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined;
|
|
48
|
-
}> | undefined) => import('unplugin').EsbuildPlugin;
|
|
49
|
+
} | (() => Config)> | undefined) => import('unplugin').EsbuildPlugin;
|
|
49
50
|
/**
|
|
50
51
|
* @example
|
|
51
52
|
* ```ts
|
|
@@ -69,10 +70,10 @@ declare const TanStackRouterCodeSplitterEsbuild: (options?: Partial<{
|
|
|
69
70
|
disableTypes: boolean;
|
|
70
71
|
addExtensions: boolean;
|
|
71
72
|
enableRouteTreeFormatting: boolean;
|
|
72
|
-
routeTreeFileFooter: string[];
|
|
73
73
|
tmpDir: string;
|
|
74
|
+
importRoutesUsingAbsolutePaths: boolean;
|
|
74
75
|
enableRouteGeneration?: boolean | undefined;
|
|
75
|
-
codeSplittingOptions?:
|
|
76
|
+
codeSplittingOptions?: CodeSplittingOptions | undefined;
|
|
76
77
|
plugin?: {
|
|
77
78
|
vite?: {
|
|
78
79
|
environmentName?: string | undefined;
|
|
@@ -83,6 +84,7 @@ declare const TanStackRouterCodeSplitterEsbuild: (options?: Partial<{
|
|
|
83
84
|
routeFileIgnorePattern?: string | undefined;
|
|
84
85
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
85
86
|
verboseFileRoutes?: boolean | undefined;
|
|
87
|
+
routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined;
|
|
86
88
|
autoCodeSplitting?: boolean | undefined;
|
|
87
89
|
customScaffolding?: {
|
|
88
90
|
routeTemplate?: string | undefined;
|
|
@@ -92,7 +94,7 @@ declare const TanStackRouterCodeSplitterEsbuild: (options?: Partial<{
|
|
|
92
94
|
enableCodeSplitting?: boolean | undefined;
|
|
93
95
|
} | undefined;
|
|
94
96
|
plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined;
|
|
95
|
-
}> | undefined) => import('unplugin').EsbuildPlugin;
|
|
97
|
+
} | (() => Config)> | undefined) => import('unplugin').EsbuildPlugin;
|
|
96
98
|
/**
|
|
97
99
|
* @example
|
|
98
100
|
* ```ts
|
|
@@ -116,10 +118,10 @@ declare const TanStackRouterEsbuild: (options?: Partial<{
|
|
|
116
118
|
disableTypes: boolean;
|
|
117
119
|
addExtensions: boolean;
|
|
118
120
|
enableRouteTreeFormatting: boolean;
|
|
119
|
-
routeTreeFileFooter: string[];
|
|
120
121
|
tmpDir: string;
|
|
122
|
+
importRoutesUsingAbsolutePaths: boolean;
|
|
121
123
|
enableRouteGeneration?: boolean | undefined;
|
|
122
|
-
codeSplittingOptions?:
|
|
124
|
+
codeSplittingOptions?: CodeSplittingOptions | undefined;
|
|
123
125
|
plugin?: {
|
|
124
126
|
vite?: {
|
|
125
127
|
environmentName?: string | undefined;
|
|
@@ -130,6 +132,7 @@ declare const TanStackRouterEsbuild: (options?: Partial<{
|
|
|
130
132
|
routeFileIgnorePattern?: string | undefined;
|
|
131
133
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
132
134
|
verboseFileRoutes?: boolean | undefined;
|
|
135
|
+
routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined;
|
|
133
136
|
autoCodeSplitting?: boolean | undefined;
|
|
134
137
|
customScaffolding?: {
|
|
135
138
|
routeTemplate?: string | undefined;
|
|
@@ -154,10 +157,10 @@ declare const tanstackRouter: (options?: Partial<{
|
|
|
154
157
|
disableTypes: boolean;
|
|
155
158
|
addExtensions: boolean;
|
|
156
159
|
enableRouteTreeFormatting: boolean;
|
|
157
|
-
routeTreeFileFooter: string[];
|
|
158
160
|
tmpDir: string;
|
|
161
|
+
importRoutesUsingAbsolutePaths: boolean;
|
|
159
162
|
enableRouteGeneration?: boolean | undefined;
|
|
160
|
-
codeSplittingOptions?:
|
|
163
|
+
codeSplittingOptions?: CodeSplittingOptions | undefined;
|
|
161
164
|
plugin?: {
|
|
162
165
|
vite?: {
|
|
163
166
|
environmentName?: string | undefined;
|
|
@@ -168,6 +171,7 @@ declare const tanstackRouter: (options?: Partial<{
|
|
|
168
171
|
routeFileIgnorePattern?: string | undefined;
|
|
169
172
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
170
173
|
verboseFileRoutes?: boolean | undefined;
|
|
174
|
+
routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined;
|
|
171
175
|
autoCodeSplitting?: boolean | undefined;
|
|
172
176
|
customScaffolding?: {
|
|
173
177
|
routeTemplate?: string | undefined;
|
|
@@ -180,4 +184,4 @@ declare const tanstackRouter: (options?: Partial<{
|
|
|
180
184
|
}> | undefined) => import('unplugin').EsbuildPlugin;
|
|
181
185
|
export default TanStackRouterEsbuild;
|
|
182
186
|
export { configSchema, TanStackRouterGeneratorEsbuild, TanStackRouterCodeSplitterEsbuild, TanStackRouterEsbuild, tanstackRouter, };
|
|
183
|
-
export type { Config };
|
|
187
|
+
export type { Config, CodeSplittingOptions };
|
package/dist/esm/esbuild.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esbuild.js","sources":["../../src/esbuild.ts"],"sourcesContent":["import { createEsbuildPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'\nimport { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\n\nimport type { Config } from './core/config'\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [TanStackRouterGeneratorEsbuild()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterGeneratorEsbuild = createEsbuildPlugin(\n unpluginRouterGeneratorFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [TanStackRouterCodeSplitterEsbuild()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterCodeSplitterEsbuild = createEsbuildPlugin(\n unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [tanstackRouter()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterEsbuild = createEsbuildPlugin(unpluginRouterComposedFactory)\nconst tanstackRouter = TanStackRouterEsbuild\nexport default TanStackRouterEsbuild\n\nexport {\n configSchema,\n TanStackRouterGeneratorEsbuild,\n TanStackRouterCodeSplitterEsbuild,\n TanStackRouterEsbuild,\n tanstackRouter,\n}\n\nexport type { Config }\n"],"names":[],"mappings":";;;;;AAkBA,MAAM,iCAAiC;AAAA,EACrC;AACF;AAWA,MAAM,oCAAoC;AAAA,EACxC;AACF;AAWA,MAAM,wBAAwB,oBAAoB,6BAA6B;AAC/E,MAAM,iBAAiB;"}
|
|
1
|
+
{"version":3,"file":"esbuild.js","sources":["../../src/esbuild.ts"],"sourcesContent":["import { createEsbuildPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'\nimport { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\n\nimport type { CodeSplittingOptions, Config } from './core/config'\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [TanStackRouterGeneratorEsbuild()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterGeneratorEsbuild = createEsbuildPlugin(\n unpluginRouterGeneratorFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [TanStackRouterCodeSplitterEsbuild()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterCodeSplitterEsbuild = createEsbuildPlugin(\n unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [tanstackRouter()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterEsbuild = createEsbuildPlugin(unpluginRouterComposedFactory)\nconst tanstackRouter = TanStackRouterEsbuild\nexport default TanStackRouterEsbuild\n\nexport {\n configSchema,\n TanStackRouterGeneratorEsbuild,\n TanStackRouterCodeSplitterEsbuild,\n TanStackRouterEsbuild,\n tanstackRouter,\n}\n\nexport type { Config, CodeSplittingOptions }\n"],"names":[],"mappings":";;;;;AAkBA,MAAM,iCAAiC;AAAA,EACrC;AACF;AAWA,MAAM,oCAAoC;AAAA,EACxC;AACF;AAWA,MAAM,wBAAwB,oBAAoB,6BAA6B;AAC/E,MAAM,iBAAiB;"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { configSchema, getConfig } from './core/config.js';
|
|
2
2
|
export { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin.js';
|
|
3
3
|
export { unpluginRouterGeneratorFactory } from './core/router-generator-plugin.js';
|
|
4
|
-
export type { Config, ConfigInput, ConfigOutput } from './core/config.js';
|
|
4
|
+
export type { Config, ConfigInput, ConfigOutput, CodeSplittingOptions, DeletableNodes, } from './core/config.js';
|
|
5
5
|
export { tsrSplit, splitRouteIdentNodes, defaultCodeSplitGroupings, } from './core/constants.js';
|
package/dist/esm/rspack.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { configSchema, Config } from './core/config.js';
|
|
1
|
+
import { configSchema, CodeSplittingOptions, Config } from './core/config.js';
|
|
2
2
|
/**
|
|
3
3
|
* @example
|
|
4
4
|
* ```ts
|
|
@@ -26,10 +26,10 @@ declare const TanStackRouterGeneratorRspack: (options?: Partial<{
|
|
|
26
26
|
disableTypes: boolean;
|
|
27
27
|
addExtensions: boolean;
|
|
28
28
|
enableRouteTreeFormatting: boolean;
|
|
29
|
-
routeTreeFileFooter: string[];
|
|
30
29
|
tmpDir: string;
|
|
30
|
+
importRoutesUsingAbsolutePaths: boolean;
|
|
31
31
|
enableRouteGeneration?: boolean | undefined;
|
|
32
|
-
codeSplittingOptions?:
|
|
32
|
+
codeSplittingOptions?: CodeSplittingOptions | undefined;
|
|
33
33
|
plugin?: {
|
|
34
34
|
vite?: {
|
|
35
35
|
environmentName?: string | undefined;
|
|
@@ -40,6 +40,7 @@ declare const TanStackRouterGeneratorRspack: (options?: Partial<{
|
|
|
40
40
|
routeFileIgnorePattern?: string | undefined;
|
|
41
41
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
42
42
|
verboseFileRoutes?: boolean | undefined;
|
|
43
|
+
routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined;
|
|
43
44
|
autoCodeSplitting?: boolean | undefined;
|
|
44
45
|
customScaffolding?: {
|
|
45
46
|
routeTemplate?: string | undefined;
|
|
@@ -49,7 +50,7 @@ declare const TanStackRouterGeneratorRspack: (options?: Partial<{
|
|
|
49
50
|
enableCodeSplitting?: boolean | undefined;
|
|
50
51
|
} | undefined;
|
|
51
52
|
plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined;
|
|
52
|
-
}> | undefined) => import('unplugin').RspackPluginInstance;
|
|
53
|
+
} | (() => Config)> | undefined) => import('unplugin').RspackPluginInstance;
|
|
53
54
|
/**
|
|
54
55
|
* @example
|
|
55
56
|
* ```ts
|
|
@@ -77,10 +78,10 @@ declare const TanStackRouterCodeSplitterRspack: (options?: Partial<{
|
|
|
77
78
|
disableTypes: boolean;
|
|
78
79
|
addExtensions: boolean;
|
|
79
80
|
enableRouteTreeFormatting: boolean;
|
|
80
|
-
routeTreeFileFooter: string[];
|
|
81
81
|
tmpDir: string;
|
|
82
|
+
importRoutesUsingAbsolutePaths: boolean;
|
|
82
83
|
enableRouteGeneration?: boolean | undefined;
|
|
83
|
-
codeSplittingOptions?:
|
|
84
|
+
codeSplittingOptions?: CodeSplittingOptions | undefined;
|
|
84
85
|
plugin?: {
|
|
85
86
|
vite?: {
|
|
86
87
|
environmentName?: string | undefined;
|
|
@@ -91,6 +92,7 @@ declare const TanStackRouterCodeSplitterRspack: (options?: Partial<{
|
|
|
91
92
|
routeFileIgnorePattern?: string | undefined;
|
|
92
93
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
93
94
|
verboseFileRoutes?: boolean | undefined;
|
|
95
|
+
routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined;
|
|
94
96
|
autoCodeSplitting?: boolean | undefined;
|
|
95
97
|
customScaffolding?: {
|
|
96
98
|
routeTemplate?: string | undefined;
|
|
@@ -100,7 +102,7 @@ declare const TanStackRouterCodeSplitterRspack: (options?: Partial<{
|
|
|
100
102
|
enableCodeSplitting?: boolean | undefined;
|
|
101
103
|
} | undefined;
|
|
102
104
|
plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined;
|
|
103
|
-
}> | undefined) => import('unplugin').RspackPluginInstance;
|
|
105
|
+
} | (() => Config)> | undefined) => import('unplugin').RspackPluginInstance;
|
|
104
106
|
/**
|
|
105
107
|
* @example
|
|
106
108
|
* ```ts
|
|
@@ -128,10 +130,10 @@ declare const TanStackRouterRspack: (options?: Partial<{
|
|
|
128
130
|
disableTypes: boolean;
|
|
129
131
|
addExtensions: boolean;
|
|
130
132
|
enableRouteTreeFormatting: boolean;
|
|
131
|
-
routeTreeFileFooter: string[];
|
|
132
133
|
tmpDir: string;
|
|
134
|
+
importRoutesUsingAbsolutePaths: boolean;
|
|
133
135
|
enableRouteGeneration?: boolean | undefined;
|
|
134
|
-
codeSplittingOptions?:
|
|
136
|
+
codeSplittingOptions?: CodeSplittingOptions | undefined;
|
|
135
137
|
plugin?: {
|
|
136
138
|
vite?: {
|
|
137
139
|
environmentName?: string | undefined;
|
|
@@ -142,6 +144,7 @@ declare const TanStackRouterRspack: (options?: Partial<{
|
|
|
142
144
|
routeFileIgnorePattern?: string | undefined;
|
|
143
145
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
144
146
|
verboseFileRoutes?: boolean | undefined;
|
|
147
|
+
routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined;
|
|
145
148
|
autoCodeSplitting?: boolean | undefined;
|
|
146
149
|
customScaffolding?: {
|
|
147
150
|
routeTemplate?: string | undefined;
|
|
@@ -166,10 +169,10 @@ declare const tanstackRouter: (options?: Partial<{
|
|
|
166
169
|
disableTypes: boolean;
|
|
167
170
|
addExtensions: boolean;
|
|
168
171
|
enableRouteTreeFormatting: boolean;
|
|
169
|
-
routeTreeFileFooter: string[];
|
|
170
172
|
tmpDir: string;
|
|
173
|
+
importRoutesUsingAbsolutePaths: boolean;
|
|
171
174
|
enableRouteGeneration?: boolean | undefined;
|
|
172
|
-
codeSplittingOptions?:
|
|
175
|
+
codeSplittingOptions?: CodeSplittingOptions | undefined;
|
|
173
176
|
plugin?: {
|
|
174
177
|
vite?: {
|
|
175
178
|
environmentName?: string | undefined;
|
|
@@ -180,6 +183,7 @@ declare const tanstackRouter: (options?: Partial<{
|
|
|
180
183
|
routeFileIgnorePattern?: string | undefined;
|
|
181
184
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
182
185
|
verboseFileRoutes?: boolean | undefined;
|
|
186
|
+
routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined;
|
|
183
187
|
autoCodeSplitting?: boolean | undefined;
|
|
184
188
|
customScaffolding?: {
|
|
185
189
|
routeTemplate?: string | undefined;
|
|
@@ -192,4 +196,4 @@ declare const tanstackRouter: (options?: Partial<{
|
|
|
192
196
|
}> | undefined) => import('unplugin').RspackPluginInstance;
|
|
193
197
|
export default TanStackRouterRspack;
|
|
194
198
|
export { configSchema, TanStackRouterRspack, TanStackRouterGeneratorRspack, TanStackRouterCodeSplitterRspack, tanstackRouter, };
|
|
195
|
-
export type { Config };
|
|
199
|
+
export type { Config, CodeSplittingOptions };
|
package/dist/esm/rspack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rspack.js","sources":["../../src/rspack.ts"],"sourcesContent":["import { createRspackPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'\nimport { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport type { Config } from './core/config'\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterGeneratorRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterGeneratorRspack = /* #__PURE__ */ createRspackPlugin(\n unpluginRouterGeneratorFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterCodeSplitterRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterCodeSplitterRspack = /* #__PURE__ */ createRspackPlugin(\n unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [tanstackRouter()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterRspack = /* #__PURE__ */ createRspackPlugin(\n unpluginRouterComposedFactory,\n)\nconst tanstackRouter = TanStackRouterRspack\nexport default TanStackRouterRspack\nexport {\n configSchema,\n TanStackRouterRspack,\n TanStackRouterGeneratorRspack,\n TanStackRouterCodeSplitterRspack,\n tanstackRouter,\n}\nexport type { Config }\n"],"names":[],"mappings":";;;;;AAqBA,MAAM,gCAAgD;AAAA,EACpD;AACF;AAeA,MAAM,mCAAmD;AAAA,EACvD;AACF;AAeA,MAAM,uBAAuC;AAAA,EAC3C;AACF;AACA,MAAM,iBAAiB;"}
|
|
1
|
+
{"version":3,"file":"rspack.js","sources":["../../src/rspack.ts"],"sourcesContent":["import { createRspackPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'\nimport { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport type { CodeSplittingOptions, Config } from './core/config'\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterGeneratorRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterGeneratorRspack = /* #__PURE__ */ createRspackPlugin(\n unpluginRouterGeneratorFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterCodeSplitterRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterCodeSplitterRspack = /* #__PURE__ */ createRspackPlugin(\n unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [tanstackRouter()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterRspack = /* #__PURE__ */ createRspackPlugin(\n unpluginRouterComposedFactory,\n)\nconst tanstackRouter = TanStackRouterRspack\nexport default TanStackRouterRspack\nexport {\n configSchema,\n TanStackRouterRspack,\n TanStackRouterGeneratorRspack,\n TanStackRouterCodeSplitterRspack,\n tanstackRouter,\n}\nexport type { Config, CodeSplittingOptions }\n"],"names":[],"mappings":";;;;;AAqBA,MAAM,gCAAgD;AAAA,EACpD;AACF;AAeA,MAAM,mCAAmD;AAAA,EACvD;AACF;AAeA,MAAM,uBAAuC;AAAA,EAC3C;AACF;AACA,MAAM,iBAAiB;"}
|