@tanstack/router-plugin
Version:
Modern and scalable routing for React applications
107 lines (106 loc) • 3.58 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const routerUtils = require("@tanstack/router-utils");
const babel = require("@babel/core");
const template = require("@babel/template");
const config = require("./config.cjs");
const utils = require("./utils.cjs");
function _interopNamespaceDefault(e) {
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
if (e) {
for (const k in e) {
if (k !== "default") {
const d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: () => e[k]
});
}
}
}
n.default = e;
return Object.freeze(n);
}
const template__namespace = /* @__PURE__ */ _interopNamespaceDefault(template);
const unpluginRouteAutoImportFactory = (options = {}) => {
let ROOT = process.cwd();
let userConfig = options;
return {
name: "tanstack-router:autoimport",
enforce: "pre",
transform: {
filter: {
// this is necessary for webpack / rspack to avoid matching .html files
id: /\.(m|c)?(j|t)sx?$/,
code: /createFileRoute\(|createLazyFileRoute\(/
},
handler(code, id) {
var _a;
if (!((_a = globalThis.TSR_ROUTES_BY_ID_MAP) == null ? void 0 : _a.has(id))) {
return null;
}
let routeType;
if (code.includes("createFileRoute(")) {
routeType = "createFileRoute";
} else if (code.includes("createLazyFileRoute(")) {
routeType = "createLazyFileRoute";
} else {
return null;
}
const routerImportPath = `@tanstack/${userConfig.target}-router`;
const ast = routerUtils.parseAst({ code });
let isCreateRouteFunctionImported = false;
babel.traverse(ast, {
Program: {
enter(programPath) {
programPath.traverse({
ImportDeclaration(path) {
const importedSpecifiers = path.node.specifiers.map(
(specifier) => specifier.local.name
);
if (importedSpecifiers.includes(routeType) && path.node.source.value === routerImportPath) {
isCreateRouteFunctionImported = true;
}
}
});
}
}
});
if (!isCreateRouteFunctionImported) {
if (utils.debug) console.info("Adding autoimports to route ", id);
const autoImportStatement = template__namespace.statement(
`import { ${routeType} } from '${routerImportPath}'`
)();
ast.program.body.unshift(autoImportStatement);
const result = routerUtils.generateFromAst(ast, {
sourceMaps: true,
filename: id,
sourceFileName: id
});
if (utils.debug) {
routerUtils.logDiff(code, result.code);
console.log("Output:\n", result.code + "\n\n");
}
return result;
}
return null;
}
},
vite: {
configResolved(config$1) {
ROOT = config$1.root;
userConfig = config.getConfig(options, ROOT);
}
},
rspack() {
ROOT = process.cwd();
userConfig = config.getConfig(options, ROOT);
},
webpack() {
ROOT = process.cwd();
userConfig = config.getConfig(options, ROOT);
}
};
};
exports.unpluginRouteAutoImportFactory = unpluginRouteAutoImportFactory;
//# sourceMappingURL=route-autoimport-plugin.cjs.map
;