@tanstack/router-plugin 1.41.0 → 1.43.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ast.cjs +19 -29
- package/dist/cjs/ast.cjs.map +1 -1
- package/dist/cjs/ast.d.cts +4 -19
- package/dist/cjs/code-splitter.cjs +8 -15
- package/dist/cjs/code-splitter.cjs.map +1 -1
- package/dist/cjs/compilers.cjs +299 -317
- package/dist/cjs/compilers.cjs.map +1 -1
- package/dist/cjs/compilers.d.cts +3 -17
- package/dist/esm/ast.d.ts +4 -19
- package/dist/esm/ast.js +19 -29
- package/dist/esm/ast.js.map +1 -1
- package/dist/esm/code-splitter.js +9 -16
- package/dist/esm/code-splitter.js.map +1 -1
- package/dist/esm/compilers.d.ts +3 -17
- package/dist/esm/compilers.js +299 -317
- package/dist/esm/compilers.js.map +1 -1
- package/package.json +5 -3
- package/src/ast.ts +21 -42
- package/src/code-splitter.ts +12 -18
- package/src/compilers.ts +413 -432
- package/dist/cjs/eliminateUnreferencedIdentifiers.cjs +0 -148
- package/dist/cjs/eliminateUnreferencedIdentifiers.cjs.map +0 -1
- package/dist/cjs/eliminateUnreferencedIdentifiers.d.cts +0 -9
- package/dist/esm/eliminateUnreferencedIdentifiers.d.ts +0 -9
- package/dist/esm/eliminateUnreferencedIdentifiers.js +0 -131
- package/dist/esm/eliminateUnreferencedIdentifiers.js.map +0 -1
- package/src/eliminateUnreferencedIdentifiers.ts +0 -211
package/dist/cjs/ast.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const babel = require("@babel/core");
|
|
4
|
+
require("@babel/parser");
|
|
4
5
|
const _babelPluginJsx = require("@babel/plugin-syntax-jsx");
|
|
5
6
|
const _babelPluginTypeScript = require("@babel/plugin-syntax-typescript");
|
|
6
7
|
function _interopNamespaceDefault(e) {
|
|
@@ -28,34 +29,23 @@ if (babelPluginJsx.default) {
|
|
|
28
29
|
if (babelPluginTypeScript.default) {
|
|
29
30
|
babelPluginTypeScript = babelPluginTypeScript.default;
|
|
30
31
|
}
|
|
31
|
-
function
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (res == null ? void 0 : res.code) {
|
|
49
|
-
return {
|
|
50
|
-
code: res.code,
|
|
51
|
-
map: res.map
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
return {
|
|
55
|
-
code: opts.code,
|
|
56
|
-
map: null
|
|
57
|
-
};
|
|
58
|
-
};
|
|
32
|
+
function parseAst(opts) {
|
|
33
|
+
const babelPlugins = [
|
|
34
|
+
babelPluginJsx,
|
|
35
|
+
[
|
|
36
|
+
babelPluginTypeScript,
|
|
37
|
+
{
|
|
38
|
+
isTSX: true
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
];
|
|
42
|
+
return babel__namespace.parse(opts.code, {
|
|
43
|
+
plugins: babelPlugins,
|
|
44
|
+
root: opts.root,
|
|
45
|
+
filename: opts.filename,
|
|
46
|
+
sourceMaps: true,
|
|
47
|
+
sourceType: "module"
|
|
48
|
+
});
|
|
59
49
|
}
|
|
60
|
-
exports.
|
|
50
|
+
exports.parseAst = parseAst;
|
|
61
51
|
//# sourceMappingURL=ast.cjs.map
|
package/dist/cjs/ast.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.cjs","sources":["../../src/ast.ts"],"sourcesContent":["import * as babel from '@babel/core'\n// @ts-expect-error\nimport _babelPluginJsx from '@babel/plugin-syntax-jsx'\n// @ts-expect-error\nimport _babelPluginTypeScript from '@babel/plugin-syntax-typescript'\n\nlet babelPluginJsx = _babelPluginJsx\nlet babelPluginTypeScript = _babelPluginTypeScript\n\nif (babelPluginJsx.default) {\n babelPluginJsx = babelPluginJsx.default\n}\n\nif (babelPluginTypeScript.default) {\n babelPluginTypeScript = babelPluginTypeScript.default\n}\n\nexport type
|
|
1
|
+
{"version":3,"file":"ast.cjs","sources":["../../src/ast.ts"],"sourcesContent":["import * as babel from '@babel/core'\nimport '@babel/parser'\n// @ts-expect-error\nimport _babelPluginJsx from '@babel/plugin-syntax-jsx'\n// @ts-expect-error\nimport _babelPluginTypeScript from '@babel/plugin-syntax-typescript'\n\nlet babelPluginJsx = _babelPluginJsx\nlet babelPluginTypeScript = _babelPluginTypeScript\n\nif (babelPluginJsx.default) {\n babelPluginJsx = babelPluginJsx.default\n}\n\nif (babelPluginTypeScript.default) {\n babelPluginTypeScript = babelPluginTypeScript.default\n}\n\nexport type ParseAstOptions = {\n code: string\n filename: string\n root: string\n}\n\nexport function parseAst(opts: ParseAstOptions) {\n const babelPlugins: Array<babel.PluginItem> = [\n babelPluginJsx,\n [\n babelPluginTypeScript,\n {\n isTSX: true,\n },\n ],\n ]\n\n return babel.parse(opts.code, {\n plugins: babelPlugins,\n root: opts.root,\n filename: opts.filename,\n sourceMaps: true,\n sourceType: 'module',\n })\n}\n"],"names":["babel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAI,iBAAiB;AACrB,IAAI,wBAAwB;AAE5B,IAAI,eAAe,SAAS;AAC1B,mBAAiB,eAAe;AAClC;AAEA,IAAI,sBAAsB,SAAS;AACjC,0BAAwB,sBAAsB;AAChD;AAQO,SAAS,SAAS,MAAuB;AAC9C,QAAM,eAAwC;AAAA,IAC5C;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EAAA;AAGK,SAAAA,iBAAM,MAAM,KAAK,MAAM;AAAA,IAC5B,SAAS;AAAA,IACT,MAAM,KAAK;AAAA,IACX,UAAU,KAAK;AAAA,IACf,YAAY;AAAA,IACZ,YAAY;AAAA,EAAA,CACb;AACH;;"}
|
package/dist/cjs/ast.d.cts
CHANGED
|
@@ -1,22 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import * as babel from '@babel/core';
|
|
2
|
+
export type ParseAstOptions = {
|
|
2
3
|
code: string;
|
|
3
4
|
filename: string;
|
|
4
|
-
getBabelConfig: () => {
|
|
5
|
-
plugins: Array<any>;
|
|
6
|
-
};
|
|
7
|
-
}) => Promise<{
|
|
8
|
-
code: string;
|
|
9
|
-
map: any;
|
|
10
|
-
}>;
|
|
11
|
-
export declare function compileAst(makeOpts: {
|
|
12
5
|
root: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
filename: string;
|
|
16
|
-
getBabelConfig: () => {
|
|
17
|
-
plugins: Array<any>;
|
|
18
|
-
};
|
|
19
|
-
}) => Promise<{
|
|
20
|
-
code: string;
|
|
21
|
-
map: any;
|
|
22
|
-
}>;
|
|
6
|
+
};
|
|
7
|
+
export declare function parseAst(opts: ParseAstOptions): import('@babel/parser').ParseResult<babel.types.File> | null;
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const node_path = require("node:path");
|
|
4
4
|
const node_url = require("node:url");
|
|
5
|
-
const ast = require("./ast.cjs");
|
|
6
5
|
const compilers = require("./compilers.cjs");
|
|
7
6
|
const config = require("./config.cjs");
|
|
8
7
|
const constants = require("./constants.cjs");
|
|
@@ -37,19 +36,16 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
|
|
|
37
36
|
let ROOT = process.cwd();
|
|
38
37
|
let userConfig = options;
|
|
39
38
|
const handleSplittingFile = async (code, id) => {
|
|
40
|
-
const compiledAst = ast.compileAst({
|
|
41
|
-
root: ROOT
|
|
42
|
-
});
|
|
43
39
|
if (debug) console.info("Splitting route: ", id);
|
|
44
|
-
const
|
|
40
|
+
const compiledVirtualRoute = compilers.compileCodeSplitVirtualRoute({
|
|
45
41
|
code,
|
|
46
|
-
|
|
42
|
+
root: ROOT,
|
|
47
43
|
filename: id
|
|
48
44
|
});
|
|
49
45
|
if (debug) console.info("");
|
|
50
46
|
if (debug) console.info("Split Output");
|
|
51
47
|
if (debug) console.info("");
|
|
52
|
-
if (debug) console.info(
|
|
48
|
+
if (debug) console.info(compiledVirtualRoute.code);
|
|
53
49
|
if (debug) console.info("");
|
|
54
50
|
if (debug) console.info("");
|
|
55
51
|
if (debug) console.info("");
|
|
@@ -58,22 +54,19 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
|
|
|
58
54
|
if (debug) console.info("");
|
|
59
55
|
if (debug) console.info("");
|
|
60
56
|
if (debug) console.info("");
|
|
61
|
-
return
|
|
57
|
+
return compiledVirtualRoute;
|
|
62
58
|
};
|
|
63
59
|
const handleCompilingFile = async (code, id) => {
|
|
64
|
-
const compiledAst = ast.compileAst({
|
|
65
|
-
root: ROOT
|
|
66
|
-
});
|
|
67
60
|
if (debug) console.info("Handling createRoute: ", id);
|
|
68
|
-
const
|
|
61
|
+
const compiledReferenceRoute = compilers.compileCodeSplitReferenceRoute({
|
|
69
62
|
code,
|
|
70
|
-
|
|
63
|
+
root: ROOT,
|
|
71
64
|
filename: id
|
|
72
65
|
});
|
|
73
66
|
if (debug) console.info("");
|
|
74
67
|
if (debug) console.info("Compiled Output");
|
|
75
68
|
if (debug) console.info("");
|
|
76
|
-
if (debug) console.info(
|
|
69
|
+
if (debug) console.info(compiledReferenceRoute.code);
|
|
77
70
|
if (debug) console.info("");
|
|
78
71
|
if (debug) console.info("");
|
|
79
72
|
if (debug) console.info("");
|
|
@@ -84,7 +77,7 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
|
|
|
84
77
|
if (debug) console.info("");
|
|
85
78
|
if (debug) console.info("");
|
|
86
79
|
if (debug) console.info("");
|
|
87
|
-
return
|
|
80
|
+
return compiledReferenceRoute;
|
|
88
81
|
};
|
|
89
82
|
return {
|
|
90
83
|
name: "router-code-splitter-plugin",
|
|
@@ -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'\n\nimport {
|
|
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'\n\nimport {\n compileCodeSplitReferenceRoute,\n compileCodeSplitVirtualRoute,\n} from './compilers'\nimport { getConfig } from './config'\nimport { splitPrefix } from './constants'\n\nimport type { Config } from './config'\nimport type { UnpluginContextMeta, 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\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(externalPlugin: BannedBeforeExternalPlugin, framework: string) {\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\nconst PLUGIN_NAME = 'unplugin:router-code-splitter'\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}, { framework }) => {\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 if (debug) console.info('Splitting route: ', id)\n\n const compiledVirtualRoute = compileCodeSplitVirtualRoute({\n code,\n root: ROOT,\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(compiledVirtualRoute.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 compiledVirtualRoute\n }\n\n const handleCompilingFile = async (code: string, id: string) => {\n if (debug) console.info('Handling createRoute: ', id)\n\n const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n root: ROOT,\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(compiledReferenceRoute.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 compiledReferenceRoute\n }\n\n return {\n name: 'router-code-splitter-plugin',\n enforce: 'pre',\n\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\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 (!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 await handleCompilingFile(code, id)\n }\n\n return null\n },\n\n vite: {\n async configResolved(config) {\n ROOT = config.root\n userConfig = await getConfig(options, ROOT)\n },\n },\n\n async rspack(compiler) {\n userConfig = await getConfig(options, ROOT)\n },\n }\n}\n"],"names":["isAbsolute","join","compileCodeSplitVirtualRoute","compileCodeSplitReferenceRoute","splitPrefix","pathToFileURL","fileURLToPath","config","getConfig"],"mappings":"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"}
|