The pathResolver utility provides consistent path generation across KosmoJS's codebase.
Purpose β
pathResolver solves two related path problems:
- Filesystem paths - Where files actually live on disk
- Import paths - How TypeScript imports reference those files (with
~,@,_prefixes)
Usage β
import { pathResolver } from "@kosmojs/core";
const { createPath, createImport } = pathResolver({
appRoot: "/path/to/project", // Optional: absolute project root
sourceFolder: "front", // Required: source folder name
});Creating Filesystem Paths β
Use createPath methods to generate filesystem paths:
// Core API files
createPath.coreApi("use.ts") // β "core/api/use.ts"
// Source folder files
createPath.src("config.ts") // β "src/front/config.ts"
createPath.api("users", "index.ts") // β "src/front/api/users/index.ts"
createPath.pages("dashboard.tsx") // β "src/front/pages/dashboard.tsx"
// Generated files (lib directory)
createPath.lib("types.ts") // β "lib/src/front/types.ts"
createPath.libApi("routes.ts") // β "lib/src/front/api/routes.ts"
createPath.fetch("users.ts") // β "lib/src/front/fetch/users.ts"Creating Import Paths β
Use createImport methods to generate TypeScript import paths with proper prefixes:
// Core API imports (~/ prefix)
createImport.coreApi("use") // β "~/core/api/use"
// Source folder imports (@/ prefix)
createImport.src("config") // β "@/front/config"
createImport.api("users/[id]") // β "@/front/api/users/[id]"
createImport.pages("dashboard") // β "@/front/pages/dashboard"
// Generated code imports (_/ prefix)
createImport.lib("types") // β "_/front/types"
createImport.libApi("routes") // β "_/front/api/routes"
createImport.fetch("users") // β "_/front/fetch/users"Available Methods β
createPath methods:
coreApi(...paths)- Core API directory filessrc(...paths)- Source folder filesapi(...paths)- API route filespages(...paths)- Page component filesconfig(...paths)- Configuration filesentry(...paths)- Entry point fileslib(...paths)- Generated files rootlibApi(...paths)- Generated API fileslibEntry(...paths)- Generated entry fileslibPages(...paths)- Generated page filesfetch(...paths)- Generated fetch client files
createImport methods:
coreApi(...paths)- Core API imports with~/prefixsrc(...paths)- Source imports with@/prefixconfig(...paths)- Config imports with@/prefixapi(...paths)- API imports with@/prefixpages(...paths)- Page imports with@/prefixlib(...paths)- Generated imports with_/prefixlibApi(...paths)- Generated API imports with_/prefixlibEntry(...paths)- Generated entry imports with_/prefixfetch(...paths)- Fetch client imports with_/prefix
The resolver ensures your generator uses the same path conventions as KosmoJS built-in generators, maintaining consistency across the codebase.
Handlebars Integration β
The createImportHelper method provides a Handlebars-ready helper for template generation. Register it through renderFactory:
import { pathResolver, renderFactory } from "@kosmojs/dev";
const { createPath, createImportHelper } = pathResolver({
appRoot,
sourceFolder,
});
const { render, renderToFile } = renderFactory({
formatters,
helpers: {
createImport: createImportHelper, // Register as "createImport" helper
},
});Now you can use it in Handlebars templates:
Which compiles to:
import { defineRoute } from "_/front/api/users/[id]";
import config from "@/front/config";
import { GET } from "_/front/fetch/posts";The helper automatically handles Handlebars' argument passing (Handlebars appends an options object as the last argument, which createImportHelper strips off before delegating to createImport).
Usage in templates:
Where method is any createImport method name: "coreApi", "src", "api", "pages", "lib", "libApi", "fetch", etc.