UNPKG

@tanstack/router-plugin

Version:

Modern and scalable routing for React applications

83 lines (82 loc) 3 kB
const require_runtime = require("../_virtual/_rolldown/runtime.cjs"); const require_config = require("./config.cjs"); const require_utils = require("./utils.cjs"); let _tanstack_router_utils = require("@tanstack/router-utils"); let _babel_core = require("@babel/core"); _babel_core = require_runtime.__toESM(_babel_core); let _babel_template = require("@babel/template"); _babel_template = require_runtime.__toESM(_babel_template); //#region src/core/route-autoimport-plugin.ts /** * This plugin adds imports for createFileRoute and createLazyFileRoute to the file route. */ var unpluginRouteAutoImportFactory = (options = {}) => { let ROOT = process.cwd(); let userConfig; function initUserConfig() { if (typeof options === "function") userConfig = options(); else userConfig = require_config.getConfig(options, ROOT); } return { name: "tanstack-router:autoimport", enforce: "pre", transform: { filter: { id: /\.(m|c)?(j|t)sx?$/, code: /createFileRoute\(|createLazyFileRoute\(/ }, handler(code, id) { const normalizedId = require_utils.normalizePath(id); if (!globalThis.TSR_ROUTES_BY_ID_MAP?.has(normalizedId)) 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 = (0, _tanstack_router_utils.parseAst)({ code }); let isCreateRouteFunctionImported = false; _babel_core.traverse(ast, { Program: { enter(programPath) { programPath.traverse({ ImportDeclaration(path) { if (path.node.specifiers.map((specifier) => specifier.local.name).includes(routeType) && path.node.source.value === routerImportPath) isCreateRouteFunctionImported = true; } }); } } }); if (!isCreateRouteFunctionImported) { if (require_utils.debug) console.info("Adding autoimports to route ", normalizedId); const autoImportStatement = _babel_template.statement(`import { ${routeType} } from '${routerImportPath}'`)(); ast.program.body.unshift(autoImportStatement); const result = (0, _tanstack_router_utils.generateFromAst)(ast, { sourceMaps: true, filename: normalizedId, sourceFileName: normalizedId }); if (require_utils.debug) { (0, _tanstack_router_utils.logDiff)(code, result.code); console.log("Output:\n", result.code + "\n\n"); } return result; } return null; } }, vite: { configResolved(config) { ROOT = config.root; initUserConfig(); }, applyToEnvironment() { return userConfig.verboseFileRoutes === false; } }, rspack() { ROOT = process.cwd(); initUserConfig(); }, webpack() { ROOT = process.cwd(); initUserConfig(); } }; }; //#endregion exports.unpluginRouteAutoImportFactory = unpluginRouteAutoImportFactory; //# sourceMappingURL=route-autoimport-plugin.cjs.map