reroute-js 0.0.13 → 0.2.0
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/CHANGELOG.md +12 -0
- package/README.md +17 -8
- package/cli/bin.js +45 -16
- package/cli/bin.js.map +4 -4
- package/cli/src/cli.d.ts.map +1 -1
- package/elysia/index.js +24 -6
- package/elysia/index.js.map +5 -5
- package/elysia/src/plugin.d.ts.map +1 -1
- package/elysia/src/routes/ssr.d.ts +2 -0
- package/elysia/src/routes/ssr.d.ts.map +1 -1
- package/elysia/src/routes/static.d.ts.map +1 -1
- package/package.json +10 -7
- package/packages/cli/README.md +264 -0
- package/packages/cli/bin.ts +3 -0
- package/packages/core/README.md +90 -0
- package/packages/elysia/README.md +250 -0
- package/packages/react/README.md +3 -0
- package/_/README.md +0 -59
- package/_/basic/package.json +0 -23
- package/_/basic/src/client/App.tsx +0 -10
- package/_/basic/src/client/components/Counter.tsx +0 -15
- package/_/basic/src/client/index.html +0 -12
- package/_/basic/src/client/index.tsx +0 -5
- package/_/basic/src/client/routes/[404].tsx +0 -18
- package/_/basic/src/client/routes/about.tsx +0 -25
- package/_/basic/src/client/routes/index.tsx +0 -57
- package/_/basic/src/index.ts +0 -20
- package/_/basic/tsconfig.json +0 -26
- package/_/blog/package.json +0 -23
- package/_/blog/src/client/App.tsx +0 -10
- package/_/blog/src/client/components/.gitkeep +0 -0
- package/_/blog/src/client/index.html +0 -12
- package/_/blog/src/client/index.tsx +0 -5
- package/_/blog/src/client/routes/[404].tsx +0 -18
- package/_/blog/src/client/routes/about.tsx +0 -25
- package/_/blog/src/client/routes/blog/[404].tsx +0 -11
- package/_/blog/src/client/routes/blog/[layout].tsx +0 -84
- package/_/blog/src/client/routes/blog/[slug].tsx +0 -11
- package/_/blog/src/client/routes/blog/content/getting-started.tsx +0 -30
- package/_/blog/src/client/routes/blog/content/hello-world.tsx +0 -29
- package/_/blog/src/client/routes/blog/index.tsx +0 -69
- package/_/blog/src/client/routes/index.tsx +0 -75
- package/_/blog/src/index.ts +0 -20
- package/_/blog/tsconfig.json +0 -26
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
## [0.2.0](https://github.com/stewones/reroute/compare/v0.1.0...v0.2.0) (2025-11-04)
|
|
2
|
+
|
|
3
|
+
### ⚡ Performance Improvements
|
|
4
|
+
|
|
5
|
+
* improve static cache ([ca13189](https://github.com/stewones/reroute/commit/ca13189025213d95e125ced4198e34956cac08d8))
|
|
6
|
+
|
|
7
|
+
### 👷 Continuous Integration
|
|
8
|
+
|
|
9
|
+
* add ci prefix as trigger ([5d9567a](https://github.com/stewones/reroute/commit/5d9567aede7ab17c3e3da244b2d0e8963ece0dc4))
|
|
10
|
+
* disable tests for now ([45c0855](https://github.com/stewones/reroute/commit/45c08557cd9a436103e9ef0dd12fa239154dd2a5))
|
|
11
|
+
* fix changelog ([00be21e](https://github.com/stewones/reroute/commit/00be21ed183061255e40c6fed51d8f885526573f))
|
|
12
|
+
* fix code quality check ([fa09adb](https://github.com/stewones/reroute/commit/fa09adb5c88bc118839d322698974c7249e9a894))
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ A dead simple file-based routing framework for building fullstack React apps on
|
|
|
12
12
|
- 📦 **Zero Config** - Works out of the box with sensible defaults
|
|
13
13
|
|
|
14
14
|
### 🛠️ CLI Tools
|
|
15
|
-
- 🚀 **`reroute init`** - Scaffold new projects with templates (basic, blog)
|
|
15
|
+
- 🚀 **`reroute init`** - Scaffold new projects with templates (basic, blog, store)
|
|
16
16
|
- 🔨 **`reroute gen`** - Generate content registry and route artifacts
|
|
17
17
|
|
|
18
18
|
### 📄 Content Management
|
|
@@ -24,6 +24,7 @@ A dead simple file-based routing framework for building fullstack React apps on
|
|
|
24
24
|
- 📦 **Collection Chunking** - Individual module bundles per content item
|
|
25
25
|
|
|
26
26
|
### ⚛️ React Integration
|
|
27
|
+
- ⚡ **React 19** - Built with the latest React version for optimal performance
|
|
27
28
|
- 🪝 **Router Hooks**:
|
|
28
29
|
- `useNavigate()` - Programmatic navigation
|
|
29
30
|
- `useParams()` - Access route parameters
|
|
@@ -39,9 +40,9 @@ A dead simple file-based routing framework for building fullstack React apps on
|
|
|
39
40
|
- `<RouterProvider>` - Router context for the app
|
|
40
41
|
- `<ContentProvider>` - Content system context
|
|
41
42
|
- `<RerouteProvider>` - All-in-one provider wrapper
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
- 🗂️ **SSR Data**:
|
|
44
|
+
- `useData()` - Read route-level SSR data without loaders
|
|
45
|
+
- `export const ssr = { data() {} }` - Route data function executed on server
|
|
45
46
|
|
|
46
47
|
### 🚀 Performance Optimizations
|
|
47
48
|
- 💾 **Smart Caching** - LRU cache for files and bundles
|
|
@@ -51,8 +52,15 @@ A dead simple file-based routing framework for building fullstack React apps on
|
|
|
51
52
|
- 🎯 **SSR Module Seeding** - Pre-populate modules for instant hydration
|
|
52
53
|
- 📊 **Collection Inlining** - Inline collection data for zero-latency rendering
|
|
53
54
|
|
|
55
|
+
### 🎨 Styling & Theming
|
|
56
|
+
- 🎨 **Tailwind CSS v4 Support** - Automatic detection and compilation with CSS-first configuration
|
|
57
|
+
- ⚡ **Live CSS Reload** - Instant style updates in development mode
|
|
58
|
+
- 🎯 **Modern CSS Features** - `@theme` and `@utility` directives support
|
|
59
|
+
- 🚀 **Oxide Engine** - 5x faster builds with the new Tailwind compiler
|
|
60
|
+
- 🔧 **Zero Config** - Works out of the box when `@tailwindcss/cli` is installed
|
|
61
|
+
|
|
54
62
|
### 🎨 Developer Experience
|
|
55
|
-
- 📁 **Project Templates** - Quick start with `basic` or `
|
|
63
|
+
- 📁 **Project Templates** - Quick start with `basic`, `blog`, or `store` templates
|
|
56
64
|
- 🔄 **Live Reload** - Server-Sent Events (SSE) for instant browser updates
|
|
57
65
|
- 🎯 **TypeScript Support** - Full type safety throughout the stack
|
|
58
66
|
- 🗂️ **File System Watcher** - Automatic rebuilds on source changes
|
|
@@ -85,17 +93,18 @@ A dead simple file-based routing framework for building fullstack React apps on
|
|
|
85
93
|
- 🔧 **URL Prefix** - Deploy to subdirectories with custom prefixes
|
|
86
94
|
- 🚫 **Ignore Patterns** - Exclude files from static serving
|
|
87
95
|
- 🏷️ **Custom Headers** - Add headers to static file responses
|
|
88
|
-
|
|
96
|
+
- ⏰ **Cache Control** - Configurable max-age and cache directives for static files and `__reroute_data` JSON
|
|
89
97
|
- 🎨 **HTML Template** - Custom index.html with variable substitution
|
|
90
98
|
|
|
91
99
|
## 🚀 Quick Start
|
|
92
100
|
|
|
93
101
|
```bash
|
|
94
|
-
# Create a new project
|
|
102
|
+
# Create a new project (basic template)
|
|
95
103
|
bunx reroute-js init my-app
|
|
96
104
|
|
|
97
|
-
# Or with a template
|
|
105
|
+
# Or with a specific template
|
|
98
106
|
bunx reroute-js init my-blog --template blog
|
|
107
|
+
bunx reroute-js init my-store --template store
|
|
99
108
|
|
|
100
109
|
# Navigate to project
|
|
101
110
|
cd my-app
|
package/cli/bin.js
CHANGED
|
@@ -50,10 +50,10 @@ function parseArgs(args) {
|
|
|
50
50
|
const templateIndex = args.indexOf("--template");
|
|
51
51
|
if (templateIndex !== -1 && args[templateIndex + 1]) {
|
|
52
52
|
const templateArg = args[templateIndex + 1];
|
|
53
|
-
if (
|
|
53
|
+
if (["basic", "blog", "store"].includes(templateArg)) {
|
|
54
54
|
template = templateArg;
|
|
55
55
|
} else {
|
|
56
|
-
console.error(`Error: Unknown template "${templateArg}". Available templates: basic, blog`);
|
|
56
|
+
console.error(`Error: Unknown template "${templateArg}". Available templates: basic, blog, store`);
|
|
57
57
|
return null;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -67,8 +67,9 @@ async function scaffoldProject(options) {
|
|
|
67
67
|
process.exit(1);
|
|
68
68
|
}
|
|
69
69
|
console.log(`
|
|
70
|
-
\
|
|
71
|
-
console.log(
|
|
70
|
+
\uD83C\uDFD7️ Creating project: ${projectName}`);
|
|
71
|
+
console.log(`
|
|
72
|
+
\uD83D\uDCE6 Template: ${template}
|
|
72
73
|
`);
|
|
73
74
|
const templatePath = join(import.meta.dir, "..", "_", template);
|
|
74
75
|
if (!existsSync(templatePath)) {
|
|
@@ -79,7 +80,7 @@ async function scaffoldProject(options) {
|
|
|
79
80
|
await copyTemplateFiles(templatePath, projectPath, {
|
|
80
81
|
PROJECT_NAME: projectName
|
|
81
82
|
});
|
|
82
|
-
console.log(`\uD83D\uDCE5
|
|
83
|
+
console.log(`\uD83D\uDCE5 Installing dependencies...
|
|
83
84
|
`);
|
|
84
85
|
const proc = Bun.spawn(["bun", "install"], {
|
|
85
86
|
cwd: projectPath,
|
|
@@ -110,32 +111,39 @@ async function copyTemplateFiles(templatePath, targetPath, variables) {
|
|
|
110
111
|
}
|
|
111
112
|
function printSuccess(projectName, template) {
|
|
112
113
|
console.log(`
|
|
113
|
-
|
|
114
|
+
\uD83C\uDFCE️ Project created successfully!
|
|
114
115
|
`);
|
|
115
116
|
console.log(`Next steps:
|
|
116
117
|
`);
|
|
117
118
|
console.log(` cd ${projectName}`);
|
|
119
|
+
console.log(" bunx reroute-js gen # Required on first run");
|
|
118
120
|
console.log(` bun dev
|
|
119
121
|
`);
|
|
120
122
|
console.log(`Your app will be running at http://localhost:3000
|
|
121
123
|
`);
|
|
122
124
|
console.log("Project structure:");
|
|
123
125
|
console.log(" src/");
|
|
124
|
-
console.log(" |-- index.ts
|
|
126
|
+
console.log(" |-- index.ts # Server entry point");
|
|
125
127
|
console.log(" +-- client/");
|
|
126
|
-
console.log(" |-- App.tsx
|
|
127
|
-
console.log(" |-- index.tsx
|
|
128
|
-
console.log(" |-- index.html
|
|
129
|
-
console.log(" |-- routes/
|
|
128
|
+
console.log(" |-- App.tsx # Root React component");
|
|
129
|
+
console.log(" |-- index.tsx # Client entry point");
|
|
130
|
+
console.log(" |-- index.html # HTML template");
|
|
131
|
+
console.log(" |-- routes/ # File-based routes");
|
|
130
132
|
if (template === "blog") {
|
|
131
133
|
console.log(" | |-- blog/");
|
|
132
|
-
console.log(" | | |-- content/
|
|
134
|
+
console.log(" | | |-- content/ # Blog posts");
|
|
133
135
|
console.log(" | | |-- [slug].tsx");
|
|
134
136
|
console.log(" | | +-- index.tsx");
|
|
135
137
|
}
|
|
138
|
+
if (template === "store") {
|
|
139
|
+
console.log(" | |-- products/");
|
|
140
|
+
console.log(" | |-- categories/");
|
|
141
|
+
console.log(" |-- lib/ # API client & utilities");
|
|
142
|
+
console.log(" +-- theme.css # Tailwind CSS v4");
|
|
143
|
+
}
|
|
136
144
|
console.log(" | |-- index.tsx");
|
|
137
145
|
console.log(" | +-- about.tsx");
|
|
138
|
-
console.log(` +-- components/
|
|
146
|
+
console.log(` +-- components/ # React components
|
|
139
147
|
`);
|
|
140
148
|
console.log("Learn more at https://github.com/stewones/reroute");
|
|
141
149
|
}
|
|
@@ -146,12 +154,13 @@ function printHelp() {
|
|
|
146
154
|
console.log(" reroute init <project-name> [options]");
|
|
147
155
|
console.log("");
|
|
148
156
|
console.log("Options:");
|
|
149
|
-
console.log(" --template <name> Template to use (basic, blog)");
|
|
157
|
+
console.log(" --template <name> Template to use (basic, blog, store)");
|
|
150
158
|
console.log(" -h, --help Show help");
|
|
151
159
|
console.log("");
|
|
152
160
|
console.log("Examples:");
|
|
153
161
|
console.log(" reroute init my-app");
|
|
154
162
|
console.log(" reroute init my-blog --template blog");
|
|
163
|
+
console.log(" reroute init my-store --template store");
|
|
155
164
|
}
|
|
156
165
|
var init_init = () => {};
|
|
157
166
|
|
|
@@ -795,6 +804,7 @@ var init_gen = __esm(() => {
|
|
|
795
804
|
});
|
|
796
805
|
|
|
797
806
|
// packages/cli/src/cli.ts
|
|
807
|
+
import path from "node:path";
|
|
798
808
|
var commands = {
|
|
799
809
|
init: () => Promise.resolve().then(() => (init_init(), exports_init)),
|
|
800
810
|
build: () => Promise.resolve().then(() => exports_build),
|
|
@@ -803,6 +813,11 @@ var commands = {
|
|
|
803
813
|
};
|
|
804
814
|
async function main() {
|
|
805
815
|
const args = process.argv.slice(2);
|
|
816
|
+
if (args[0] === "--version" || args[0] === "-v") {
|
|
817
|
+
const version = await getVersion();
|
|
818
|
+
console.log(version);
|
|
819
|
+
process.exit(0);
|
|
820
|
+
}
|
|
806
821
|
if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
|
|
807
822
|
printHelp2();
|
|
808
823
|
process.exit(0);
|
|
@@ -835,7 +850,8 @@ function printHelp2() {
|
|
|
835
850
|
console.log(" dev Start development server");
|
|
836
851
|
console.log("");
|
|
837
852
|
console.log("Options:");
|
|
838
|
-
console.log(" -h, --help
|
|
853
|
+
console.log(" -h, --help Show help");
|
|
854
|
+
console.log(" -v, --version Show version");
|
|
839
855
|
console.log("");
|
|
840
856
|
console.log("Examples:");
|
|
841
857
|
console.log(" reroute gen");
|
|
@@ -844,6 +860,19 @@ function printHelp2() {
|
|
|
844
860
|
console.log(" reroute build --minify");
|
|
845
861
|
console.log(" reroute dev --port 3000");
|
|
846
862
|
}
|
|
863
|
+
async function getVersion() {
|
|
864
|
+
const possiblePaths = [
|
|
865
|
+
path.join(import.meta.dir, "../../../package.json"),
|
|
866
|
+
path.join(import.meta.dir, "../package.json")
|
|
867
|
+
];
|
|
868
|
+
for (const pkgPath of possiblePaths) {
|
|
869
|
+
try {
|
|
870
|
+
const pkg = await Bun.file(pkgPath).json();
|
|
871
|
+
return pkg.version;
|
|
872
|
+
} catch {}
|
|
873
|
+
}
|
|
874
|
+
return "unknown";
|
|
875
|
+
}
|
|
847
876
|
main();
|
|
848
877
|
|
|
849
|
-
//# debugId=
|
|
878
|
+
//# debugId=6AFDAF7BCD23E07864756E2164756E21
|
package/cli/bin.js.map
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/cli/src/commands/init.ts", "../../packages/cli/src/commands/build.ts", "../../packages/cli/src/commands/dev.ts", "../../packages/cli/src/libs/tailwind.ts", "../../packages/cli/src/commands/gen.ts", "../../packages/cli/src/cli.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"#!/usr/bin/env bun\n\n/**\n * Reroute init command\n *\n * Scaffold a new Reroute project with templates\n */\n\nimport { existsSync } from 'node:fs';\nimport { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\ninterface InitOptions {\n\tprojectName: string;\n\ttemplate: 'basic' | 'blog';\n}\n\nexport default async function init(args: string[]) {\n\tconst options = parseArgs(args);\n\n\tif (!options) {\n\t\tprintHelp();\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\tawait scaffoldProject(options);\n\t} catch (error) {\n\t\tconsole.error('Error scaffolding project:', error);\n\t\tprocess.exit(1);\n\t}\n}\n\nfunction parseArgs(args: string[]): InitOptions | null {\n\tif (args.length === 0 || args[0] === '--help' || args[0] === '-h') {\n\t\treturn null;\n\t}\n\n\tconst projectName = args[0];\n\n\tif (!projectName || projectName.startsWith('-')) {\n\t\tconsole.error('Error: Project name is required');\n\t\treturn null;\n\t}\n\n\t// Validate project name\n\tif (!/^[a-z0-9-_]+$/i.test(projectName)) {\n\t\tconsole.error(\n\t\t\t'Error: Project name can only contain letters, numbers, hyphens, and underscores',\n\t\t);\n\t\treturn null;\n\t}\n\n\tlet template: 'basic' | 'blog' = 'basic';\n\n\t// Parse template flag\n\tconst templateIndex = args.indexOf('--template');\n\tif (templateIndex !== -1 && args[templateIndex + 1]) {\n\t\tconst templateArg = args[templateIndex + 1];\n\t\tif (
|
|
5
|
+
"#!/usr/bin/env bun\n\n/**\n * Reroute init command\n *\n * Scaffold a new Reroute project with templates\n */\n\nimport { existsSync } from 'node:fs';\nimport { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\ninterface InitOptions {\n\tprojectName: string;\n\ttemplate: 'basic' | 'blog' | 'store';\n}\n\nexport default async function init(args: string[]) {\n\tconst options = parseArgs(args);\n\n\tif (!options) {\n\t\tprintHelp();\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\tawait scaffoldProject(options);\n\t} catch (error) {\n\t\tconsole.error('Error scaffolding project:', error);\n\t\tprocess.exit(1);\n\t}\n}\n\nfunction parseArgs(args: string[]): InitOptions | null {\n\tif (args.length === 0 || args[0] === '--help' || args[0] === '-h') {\n\t\treturn null;\n\t}\n\n\tconst projectName = args[0];\n\n\tif (!projectName || projectName.startsWith('-')) {\n\t\tconsole.error('Error: Project name is required');\n\t\treturn null;\n\t}\n\n\t// Validate project name\n\tif (!/^[a-z0-9-_]+$/i.test(projectName)) {\n\t\tconsole.error(\n\t\t\t'Error: Project name can only contain letters, numbers, hyphens, and underscores',\n\t\t);\n\t\treturn null;\n\t}\n\n\tlet template: 'basic' | 'blog' | 'store' = 'basic';\n\n\t// Parse template flag\n\tconst templateIndex = args.indexOf('--template');\n\tif (templateIndex !== -1 && args[templateIndex + 1]) {\n\t\tconst templateArg = args[templateIndex + 1];\n\t\tif (['basic', 'blog', 'store'].includes(templateArg)) {\n\t\t\ttemplate = templateArg as 'basic' | 'blog' | 'store';\n\t\t} else {\n\t\t\tconsole.error(\n\t\t\t\t`Error: Unknown template \"${templateArg}\". Available templates: basic, blog, store`,\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\treturn { projectName, template };\n}\n\nasync function scaffoldProject(options: InitOptions) {\n\tconst { projectName, template } = options;\n\tconst projectPath = join(process.cwd(), projectName);\n\n\t// Check if directory already exists\n\tif (existsSync(projectPath)) {\n\t\tconsole.error(`Error: Directory \"${projectName}\" already exists`);\n\t\tprocess.exit(1);\n\t}\n\n\tconsole.log(`\\n🏗️ Creating project: ${projectName}`);\n\tconsole.log(`\\n📦 Template: ${template}\\n`);\n\n\t// Get template directory path\n\tconst templatePath = join(import.meta.dir, '..', '_', template);\n\n\tif (!existsSync(templatePath)) {\n\t\tconsole.error(`Error: Template directory not found at ${templatePath}`);\n\t\tprocess.exit(1);\n\t}\n\n\t// Create project directory\n\tawait mkdir(projectPath, { recursive: true });\n\n\t// Copy template files\n\tawait copyTemplateFiles(templatePath, projectPath, {\n\t\tPROJECT_NAME: projectName,\n\t});\n\n\t// Run bun install\n\tconsole.log('📥 Installing dependencies...\\n');\n\tconst proc = Bun.spawn(['bun', 'install'], {\n\t\tcwd: projectPath,\n\t\tstdout: 'inherit',\n\t\tstderr: 'inherit',\n\t});\n\n\tawait proc.exited;\n\n\t// Print success message\n\tprintSuccess(projectName, template);\n}\n\nasync function copyTemplateFiles(\n\ttemplatePath: string,\n\ttargetPath: string,\n\tvariables: Record<string, string>,\n) {\n\tconst entries = await readdir(templatePath, { withFileTypes: true });\n\n\tfor (const entry of entries) {\n\t\tconst sourcePath = join(templatePath, entry.name);\n\t\tconst destPath = join(targetPath, entry.name);\n\n\t\tif (entry.isDirectory()) {\n\t\t\t// Create directory and recurse\n\t\t\tawait mkdir(destPath, { recursive: true });\n\t\t\tawait copyTemplateFiles(sourcePath, destPath, variables);\n\t\t} else if (entry.isFile()) {\n\t\t\t// Read file content\n\t\t\tconst content = await readFile(sourcePath, 'utf-8');\n\n\t\t\t// Replace variables in content\n\t\t\tlet processedContent = content;\n\t\t\tfor (const [key, value] of Object.entries(variables)) {\n\t\t\t\tconst placeholder = `{{${key}}}`;\n\t\t\t\tprocessedContent = processedContent.split(placeholder).join(value);\n\t\t\t}\n\n\t\t\t// Write file\n\t\t\tawait writeFile(destPath, processedContent);\n\t\t}\n\t}\n}\n\nfunction printSuccess(projectName: string, template: string) {\n\tconsole.log('\\n🏎️ Project created successfully!\\n');\n\tconsole.log('Next steps:\\n');\n\tconsole.log(` cd ${projectName}`);\n\tconsole.log(' bunx reroute-js gen # Required on first run');\n\tconsole.log(' bun dev\\n');\n\tconsole.log('Your app will be running at http://localhost:3000\\n');\n\tconsole.log('Project structure:');\n\tconsole.log(' src/');\n\tconsole.log(' |-- index.ts # Server entry point');\n\tconsole.log(' +-- client/');\n\tconsole.log(' |-- App.tsx # Root React component');\n\tconsole.log(' |-- index.tsx # Client entry point');\n\tconsole.log(' |-- index.html # HTML template');\n\tconsole.log(' |-- routes/ # File-based routes');\n\tif (template === 'blog') {\n\t\tconsole.log(' | |-- blog/');\n\t\tconsole.log(' | | |-- content/ # Blog posts');\n\t\tconsole.log(' | | |-- [slug].tsx');\n\t\tconsole.log(' | | +-- index.tsx');\n\t}\n\tif (template === 'store') {\n\t\tconsole.log(' | |-- products/');\n\t\tconsole.log(' | |-- categories/');\n\t\tconsole.log(' |-- lib/ # API client & utilities');\n\t\tconsole.log(' +-- theme.css # Tailwind CSS v4');\n\t}\n\tconsole.log(' | |-- index.tsx');\n\tconsole.log(' | +-- about.tsx');\n\tconsole.log(' +-- components/ # React components\\n');\n\tconsole.log('Learn more at https://github.com/stewones/reroute');\n}\n\nfunction printHelp() {\n\tconsole.log('reroute init - Scaffold a new Reroute project');\n\tconsole.log('');\n\tconsole.log('Usage:');\n\tconsole.log(' reroute init <project-name> [options]');\n\tconsole.log('');\n\tconsole.log('Options:');\n\tconsole.log(' --template <name> Template to use (basic, blog, store)');\n\tconsole.log(' -h, --help Show help');\n\tconsole.log('');\n\tconsole.log('Examples:');\n\tconsole.log(' reroute init my-app');\n\tconsole.log(' reroute init my-blog --template blog');\n\tconsole.log(' reroute init my-store --template store');\n}\n",
|
|
6
6
|
"#!/usr/bin/env bun\n\n/**\n * Reroute build command\n *\n * Build your Reroute application for production\n */\n\nexport default async function build(_args: string[]) {\n\tconsole.log('reroute build - Coming Soon');\n\tconsole.log('');\n\tconsole.log(\n\t\t'This command will build your Reroute application for production.',\n\t);\n\tconsole.log('');\n\tconsole.log('Planned usage:');\n\tconsole.log(' reroute build');\n\tconsole.log(' reroute build --minify');\n\tconsole.log(' reroute build --analyze');\n\tconsole.log('');\n\tconsole.log(\n\t\t'For now, please use your own build setup or check the examples.',\n\t);\n}\n",
|
|
7
7
|
"#!/usr/bin/env bun\n\n/**\n * Reroute dev command\n *\n * Start a development server with live reload\n */\n\nexport default async function dev(_args: string[]) {\n\tconsole.log('reroute dev - Coming Soon');\n\tconsole.log('');\n\tconsole.log('This command will start a development server with live reload.');\n\tconsole.log('');\n\tconsole.log('Planned usage:');\n\tconsole.log(' reroute dev');\n\tconsole.log(' reroute dev --port 3000');\n\tconsole.log(' reroute dev --host 0.0.0.0');\n\tconsole.log('');\n\tconsole.log('Note: dev already generates content registry and static assets');\n\tconsole.log('');\n\tconsole.log(\n\t\t'For now, please use your own dev server setup or check the examples.',\n\t);\n}\n",
|
|
8
8
|
"/**\n * Tailwind CSS v4 integration utility\n *\n * Manages Tailwind CLI integration for the Reroute framework\n */\n\nimport type { ChildProcess } from 'node:child_process';\nimport { spawn } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nexport interface TailwindProcess {\n\tprocess: ChildProcess;\n\tstop: () => void;\n}\n\n/**\n * Check if Tailwind CSS v4 is available in the project\n */\nexport function isTailwindAvailable(cwd: string): boolean {\n\tconst packageJsonPath = join(cwd, 'package.json');\n\n\tif (!existsSync(packageJsonPath)) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\tconst deps = {\n\t\t\t...packageJson.dependencies,\n\t\t\t...packageJson.devDependencies,\n\t\t};\n\n\t\treturn '@tailwindcss/cli' in deps;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Get the default paths for Tailwind CSS\n */\nexport function getTailwindPaths(cwd: string) {\n\tconst input = join(cwd, 'src/client/theme.css');\n\tconst output = join(cwd, '.reroute/theme.css');\n\n\treturn { input, output };\n}\n\n/**\n * Check if Tailwind input file exists and uses v4 format\n */\nexport function hasTailwindInput(cwd: string): boolean {\n\tconst { input } = getTailwindPaths(cwd);\n\n\tif (!existsSync(input)) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst content = readFileSync(input, 'utf-8');\n\t\t// v4 uses @import \"tailwindcss\"\n\t\treturn content.includes('@import \"tailwindcss\"');\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function resolveTailwindBin(cwd: string): string {\n\t// Try to find tailwindcss binary, checking up to 3 levels up\n\tconst pathsToTry = [\n\t\tjoin(cwd, 'node_modules/.bin/tailwindcss'),\n\t\tjoin(cwd, '../node_modules/.bin/tailwindcss'),\n\t\tjoin(cwd, '../../node_modules/.bin/tailwindcss'),\n\t\tjoin(cwd, '../../../node_modules/.bin/tailwindcss'),\n\t];\n\n\tfor (const binPath of pathsToTry) {\n\t\tif (existsSync(binPath)) {\n\t\t\treturn binPath;\n\t\t}\n\t}\n\n\t// Fallback to the default location if none found\n\treturn join(cwd, 'node_modules/.bin/tailwindcss');\n}\n\n/**\n * Build Tailwind CSS using the Tailwind CLI\n */\nexport async function buildTailwind(cwd: string): Promise<void> {\n\tconst { input, output } = getTailwindPaths(cwd);\n\n\treturn new Promise((resolve, reject) => {\n\t\tconst tailwindBin = resolveTailwindBin(cwd);\n\t\tconst args = ['-i', input, '-o', output];\n\n\t\tconsole.log(`[reroute/tailwind] build start: -i ${input} -o ${output}`);\n\n\t\tconst tailwind = spawn(tailwindBin, args, {\n\t\t\tcwd,\n\t\t\tstdio: 'pipe',\n\t\t});\n\n\t\ttailwind.stdout?.on('data', (data) => {\n\t\t\tconst line = data.toString().trim();\n\t\t\tif (line) {\n\t\t\t\tconsole.log(`[reroute/tailwind] ${line}`);\n\t\t\t}\n\t\t});\n\n\t\ttailwind.stderr?.on('data', (data) => {\n\t\t\tconst line = data.toString().trim();\n\t\t\tif (line) {\n\t\t\t\tconsole.log(`[reroute/tailwind] ${line}`);\n\t\t\t}\n\t\t});\n\n\t\ttailwind.on('close', (code) => {\n\t\t\tif (code === 0) {\n\t\t\t\tconsole.log('[reroute/tailwind] build done');\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\treject(new Error(`Tailwind CSS build failed with code ${code}`));\n\t\t\t}\n\t\t});\n\n\t\ttailwind.on('error', (error) => {\n\t\t\treject(error);\n\t\t});\n\t});\n}\n\n/**\n * Build Tailwind once if installed and input exists.\n * Returns true if a build was attempted (success or failure), false if skipped.\n */\nexport async function buildTailwindIfConfigured(cwd: string): Promise<boolean> {\n\ttry {\n\t\tif (isTailwindAvailable(cwd) && hasTailwindInput(cwd)) {\n\t\t\tawait buildTailwind(cwd);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t} catch (e) {\n\t\tconsole.warn('[reroute/tailwind] build failed:', e);\n\t\treturn true;\n\t}\n}\n\n/**\n * Start Tailwind CSS in watch mode\n */\nexport function watchTailwind(cwd: string): TailwindProcess {\n\tconst { input, output } = getTailwindPaths(cwd);\n\n\tconst tailwindBin = resolveTailwindBin(cwd);\n\tconst args = ['-i', input, '-o', output, '--watch'];\n\n\tconsole.log('[reroute/tailwind] Starting Tailwind CSS v4 in watch mode...');\n\n\tconst tailwind = spawn(tailwindBin, args, {\n\t\tcwd,\n\t\tstdio: 'inherit',\n\t});\n\n\ttailwind.on('error', (error) => {\n\t\tconsole.error('[reroute/tailwind] Error:', error);\n\t});\n\n\tconst stop = () => {\n\t\tconsole.log('[reroute/tailwind] Stopping Tailwind CSS...');\n\t\ttailwind.kill();\n\t};\n\n\treturn {\n\t\tprocess: tailwind,\n\t\tstop,\n\t};\n}\n\n/**\n * Initialize Tailwind CSS integration\n * Returns null if Tailwind is not available or configured\n */\nexport function initTailwind(cwd: string): TailwindProcess | null {\n\t// Check if Tailwind is installed\n\tif (!isTailwindAvailable(cwd)) {\n\t\treturn null;\n\t}\n\n\t// Check if input file exists and uses v4 format\n\tif (!hasTailwindInput(cwd)) {\n\t\tconsole.log(\n\t\t\t'[reroute/tailwind] theme.css not found or missing @import \"tailwindcss\", skipping...',\n\t\t);\n\t\treturn null;\n\t}\n\n\tconsole.log('[reroute/tailwind] Detected Tailwind CSS v4');\n\n\t// For non-watch mode, build once and return null\n\tbuildTailwind(cwd)\n\t\t.then(() => {\n\t\t\tconsole.log('[reroute/tailwind] Built successfully');\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.error('[reroute/tailwind] Build failed:', error);\n\t\t});\n\n\treturn null;\n}\n",
|
|
9
9
|
"#!/usr/bin/env bun\nimport { watch } from 'node:fs';\nimport { mkdir, readdir, rm, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { buildTailwind, initTailwind } from '../libs/tailwind';\n\n// biome-ignore lint/suspicious/noExplicitAny: flexible content meta type\ntype Doc = any;\n\ninterface RouteFile {\n\tpath: string;\n\tpattern: string;\n\tfilePath: string;\n\tisLayout: boolean;\n\tisDynamic: boolean;\n\tparams: string[];\n\t/** special case for [404].tsx */\n\tisNotFound?: boolean;\n\t/** when isNotFound, this is the base pattern to match as a prefix */\n\tnotFoundBasePattern?: string;\n}\n\ninterface RouteTree {\n\troutes: RouteFile[];\n\tlayouts: RouteFile[];\n\tnotFoundRoutes: RouteFile[];\n}\n\nconst ROUTES_DIR = 'src/client/routes';\nconst OUTPUT_DIR = '.reroute';\nconst OUTPUT_ROUTES = '.reroute/routes.ts';\nconst OUTPUT_CONTENT_TS = '.reroute/content.ts';\nconst OUTPUT_COLLECTIONS_DIR = '.reroute/collections';\nconst OUTPUT_INDEX = '.reroute/index.ts';\n\nasync function cleanupOutputDir(cwd: string) {\n\ttry {\n\t\t// Remove generated files\n\t\tawait rm(join(cwd, OUTPUT_DIR), { force: true });\n\t\t// Ensure .reroute exists for subsequent writes\n\t\tawait mkdir(join(cwd, OUTPUT_DIR), { recursive: true });\n\t\tconsole.log('[reroute/gen] Cleaned up generated artifacts in .reroute');\n\t} catch {\n\t\t// Ignore cleanup errors\n\t}\n}\n\nasync function scanDirectory(dir: string, base = ''): Promise<string[]> {\n\tconst files: string[] = [];\n\tconst entries = await readdir(dir, { withFileTypes: true });\n\n\tfor (const entry of entries) {\n\t\tconst fullPath = join(dir, entry.name);\n\t\tconst relativePath = join(base, entry.name);\n\n\t\tif (entry.isDirectory()) {\n\t\t\t// Skip content directories; those are not routes\n\t\t\tif (entry.name === 'content') continue;\n\t\t\tconst nested = await scanDirectory(fullPath, relativePath);\n\t\t\tfiles.push(...nested);\n\t\t} else if (\n\t\t\tentry.isFile() &&\n\t\t\t(entry.name.endsWith('.tsx') || entry.name.endsWith('.ts'))\n\t\t) {\n\t\t\t// Skip non-route files and any files under a content/ segment\n\t\t\tif (\n\t\t\t\trelativePath.includes('/content/') ||\n\t\t\t\trelativePath.startsWith('content/')\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!entry.name.startsWith('_') || entry.name === '[layout].tsx') {\n\t\t\t\tfiles.push(relativePath);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn files;\n}\n\n// Recursively scan for [404].tsx or [404].ts anywhere under routes, including content dirs\nasync function scan404Files(dir: string, base = ''): Promise<string[]> {\n\tconst files: string[] = [];\n\tconst entries = await readdir(dir, { withFileTypes: true });\n\tfor (const entry of entries) {\n\t\tconst fullPath = join(dir, entry.name);\n\t\tconst relativePath = join(base, entry.name);\n\t\tif (entry.isDirectory()) {\n\t\t\tconst nested = await scan404Files(fullPath, relativePath);\n\t\t\tfiles.push(...nested);\n\t\t} else if (entry.isFile()) {\n\t\t\tif (/^\\[404]\\.(tsx|ts)$/.test(entry.name)) files.push(relativePath);\n\t\t}\n\t}\n\treturn files;\n}\n\nfunction fileToRoute(filePath: string): RouteFile {\n\tconst isLayout =\n\t\tfilePath.endsWith('[layout].tsx') || filePath.endsWith('[layout].ts');\n\n\t// Remove extension\n\tlet routePath = filePath.replace(/\\.(tsx|ts)$/, '');\n\n\t// Handle layouts\n\tif (isLayout) {\n\t\troutePath = routePath.replace(/[layout]$/, '').replace(/\\/$/, '');\n\t}\n\n\t// Convert index to /\n\troutePath = routePath.replace(/\\/index$/, '').replace(/^index$/, '');\n\n\t// Extract params from [param] syntax\n\tconst params: string[] = [];\n\tconst pattern = routePath.replace(/\\[([^\\]]+)\\]/g, (_, param) => {\n\t\tparams.push(param);\n\t\treturn `:${param}`;\n\t});\n\n\t// Ensure leading slash\n\tconst normalizedPattern = pattern === '' ? '/' : `/${pattern}`;\n\n\t// Special case: [404].tsx files act as NotFound entries for their directory\n\tconst isNotFound = /(^|\\/)\\[404\\]$/.test(routePath);\n\tlet notFoundBasePattern: string | undefined;\n\tif (isNotFound) {\n\t\tconst base = routePath.replace(/(^|\\/)\\[404\\]$/, '').replace(/\\/$/, '');\n\t\tnotFoundBasePattern = base ? `/${base}` : '/';\n\t}\n\n\treturn {\n\t\tpath: routePath,\n\t\tpattern: normalizedPattern,\n\t\tfilePath,\n\t\tisLayout,\n\t\tisDynamic: params.length > 0,\n\t\tparams,\n\t\tisNotFound,\n\t\tnotFoundBasePattern,\n\t};\n}\n\nfunction sortRoutes(routes: RouteFile[]): RouteFile[] {\n\t// Sort by specificity: static routes first, then dynamic, then catch-all\n\treturn routes.sort((a, b) => {\n\t\tconst aDepth = a.pattern.split('/').length;\n\t\tconst bDepth = b.pattern.split('/').length;\n\n\t\t// Deeper routes first\n\t\tif (aDepth !== bDepth) return bDepth - aDepth;\n\n\t\t// Static before dynamic\n\t\tif (!a.isDynamic && b.isDynamic) return -1;\n\t\tif (a.isDynamic && !b.isDynamic) return 1;\n\n\t\t// Alphabetical\n\t\treturn a.pattern.localeCompare(b.pattern);\n\t});\n}\n\nfunction generateRouteTree(files: string[]): RouteTree {\n\tconst routes: RouteFile[] = [];\n\tconst layouts: RouteFile[] = [];\n\tconst notFoundRoutes: RouteFile[] = [];\n\n\tfor (const file of files) {\n\t\tconst route = fileToRoute(file);\n\t\tif (route.isLayout) {\n\t\t\tlayouts.push(route);\n\t\t} else if (route.isNotFound) {\n\t\t\t// Do not include [404] as a normal route; store separately\n\t\t\tnotFoundRoutes.push(route);\n\t\t} else {\n\t\t\troutes.push(route);\n\t\t}\n\t}\n\n\treturn {\n\t\troutes: sortRoutes(routes),\n\t\tlayouts,\n\t\tnotFoundRoutes: notFoundRoutes,\n\t};\n}\n\nfunction generateTypeScript(tree: RouteTree): string {\n\t// Import only default exports so optional named exports like\n\t// `ssr` and `meta` can be tree-shaken from the client bundle.\n\tconst imports = [\n\t\t...tree.routes.map(\n\t\t\t(r, i) =>\n\t\t\t\t`import Route${i} from '../src/client/routes/${r.filePath.replace(/\\.(tsx|ts)$/, '')}';`,\n\t\t),\n\t\t...tree.layouts.map(\n\t\t\t(l, i) =>\n\t\t\t\t`import Layout${i} from '../src/client/routes/${l.filePath.replace(/\\.(tsx|ts)$/, '')}';`,\n\t\t),\n\t\t...tree.notFoundRoutes.map(\n\t\t\t(nf, i) =>\n\t\t\t\t`import NotFound${i} from '../src/client/routes/${nf.filePath.replace(/\\.(tsx|ts)$/, '')}';`,\n\t\t),\n\t].join('\\n');\n\n\tconst routesArray = tree.routes\n\t\t.map((r, i) => {\n\t\t\treturn ` {\n pattern: \"${r.pattern}\",\n path: \"${r.path}\",\n component: Route${i},\n params: ${JSON.stringify(r.params)},\n isDynamic: ${r.isDynamic},\n } as const`;\n\t\t})\n\t\t.join(',\\n');\n\n\tconst routePatterns = tree.routes.map((r) => ` | \"${r.pattern}\"`).join('\\n');\n\n\tconst routeParamsUnion = tree.routes\n\t\t.filter((r) => r.isDynamic)\n\t\t.map((r) => {\n\t\t\tconst params = r.params.map((p) => `${p}: string`).join('; ');\n\t\t\treturn ` T extends \"${r.pattern}\" ? { ${params} } :`;\n\t\t})\n\t\t.join('\\n');\n\n\tconst layoutsArray = tree.layouts\n\t\t.map((l, i) => {\n\t\t\treturn ` {\n pattern: \"${l.pattern}\",\n path: \"${l.path}\",\n component: Layout${i},\n } as const`;\n\t\t})\n\t\t.join(',\\n');\n\n\tconst notFoundRoutesArray = tree.notFoundRoutes\n\t\t.map((nf, i) => {\n\t\t\treturn ` {\n pattern: \"${nf.notFoundBasePattern || '/'}\",\n path: \"${nf.path}\",\n component: NotFound${i},\n } as const`;\n\t\t})\n\t\t.join(',\\n');\n\n\treturn `// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨\n/* eslint-disable */\n// @ts-nocheck\n\n${imports}\n\nexport const routes: RouteInfo = [\n${routesArray}\n] as const;\n\nexport const layouts = [\n${layoutsArray || ''}\n] as const;\n\nexport const notFoundRoutes = [\n${notFoundRoutesArray || ''}\n] as const;\n\nexport type RoutePath =\n${routePatterns || ' | \"/\"'};\n\nexport type RouteParams<T extends RoutePath> = ${\n\t\trouteParamsUnion\n\t\t\t? `\\n${routeParamsUnion}\\n Record<string, never>;`\n\t\t\t: 'Record<string, never>;'\n\t}\n\nexport interface Route {\n pattern: string;\n path: string;\n component: any;\n params: string[];\n isDynamic: boolean;\n}\n\nexport function matchRoute(pathname: string): { route: Route; params: Record<string, string> } | null {\n for (const route of routes) {\n const match = matchPattern(route.pattern, pathname);\n if (match) {\n return { route, params: match };\n }\n }\n return null;\n}\n\nfunction matchPattern(pattern: string, pathname: string): Record<string, string> | null {\n const patternParts = pattern.split('/').filter(Boolean);\n const pathnameParts = pathname.split('/').filter(Boolean);\n\n if (patternParts.length !== pathnameParts.length) {\n return null;\n }\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < patternParts.length; i++) {\n const patternPart = patternParts[i];\n const pathnamePart = pathnameParts[i];\n\n if (patternPart.startsWith(':')) {\n params[patternPart.slice(1)] = pathnamePart;\n } else if (patternPart !== pathnamePart) {\n return null;\n }\n }\n\n return params;\n}\n`;\n}\n\nasync function listContentFiles(collectionDir: string): Promise<string[]> {\n\ttry {\n\t\tconst entries = await readdir(collectionDir, { withFileTypes: true });\n\t\treturn entries\n\t\t\t.filter(\n\t\t\t\t(e) =>\n\t\t\t\t\te.isFile() && /\\.(tsx|ts)$/.test(e.name) && !e.name.startsWith('_'),\n\t\t\t)\n\t\t\t.map((e) => e.name);\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nasync function sha8(text: string): Promise<string> {\n\tconst data = new TextEncoder().encode(text);\n\tconst buf = await crypto.subtle.digest('SHA-256', data);\n\tlet hex = '';\n\tfor (const b of new Uint8Array(buf)) hex += b.toString(16).padStart(2, '0');\n\treturn hex.slice(0, 8);\n}\n\nasync function buildContentChunks(cwd: string) {\n\tconst routesRoot = join(cwd, ROUTES_DIR);\n\tconsole.log(`[reroute/content] scan ${routesRoot}`);\n\t// Find any '<collection>/content/*.(ts|tsx)'\n\tconst collections = await readdir(routesRoot, { withFileTypes: true });\n\tconst results: Array<{\n\t\tcollection: string;\n\t\tname: string;\n\t\tslug: string;\n\t\thref: string;\n\t\tmoduleUrl: string;\n\t\tmeta: Doc;\n\t}> = [];\n\n\tfor (const c of collections) {\n\t\tif (!c.isDirectory()) continue;\n\t\tconst collection = c.name;\n\t\tconst contentDir = join(routesRoot, collection, 'content');\n\t\tconsole.log(`[reroute/content] collection ${collection} dir ${contentDir}`);\n\t\tconst files = await listContentFiles(contentDir);\n\t\tconsole.log(`[reroute/content] files ${files.join(',')}`);\n\t\tif (!files.length) continue;\n\n\t\tfor (const file of files) {\n\t\t\tconst name = file.replace(/\\.(tsx|ts)$/, '');\n\t\t\tconst absSrc = join(contentDir, file);\n\t\t\t// Build to JS once (no minify) for dev reliability\n\t\t\tlet code = '';\n\t\t\ttry {\n\t\t\t\tconsole.log(`[reroute/content] build ${absSrc}`);\n\t\t\t\tconst result = await Bun.build({\n\t\t\t\t\tentrypoints: [absSrc],\n\t\t\t\t\ttarget: 'browser',\n\t\t\t\t\tformat: 'esm',\n\t\t\t\t\tsplitting: false,\n\t\t\t\t\tsourcemap: Bun.env.NODE_ENV === 'production' ? 'linked' : 'none',\n\t\t\t\t\tminify: Bun.env.NODE_ENV === 'production',\n\t\t\t\t\tdefine: {\n\t\t\t\t\t\t'process.env.NODE_ENV':\n\t\t\t\t\t\t\tBun.env.NODE_ENV === 'production'\n\t\t\t\t\t\t\t\t? '\"production\"'\n\t\t\t\t\t\t\t\t: '\"development\"',\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tif (!result.success) throw new Error('build failed');\n\t\t\t\tcode = await result.outputs[0].text();\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t'[reroute/gen] Failed to build content chunk:',\n\t\t\t\t\tabsSrc,\n\t\t\t\t\te,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst hash = await sha8(code);\n\t\t\tconst chunkRelDir = join('.reroute', 'chunks', collection);\n\t\t\tconst chunkAbsDir = join(cwd, chunkRelDir);\n\t\t\tconst outFile = `${name}.${hash}.js`;\n\t\t\tconst absOut = join(chunkAbsDir, outFile);\n\t\t\tawait mkdir(chunkAbsDir, { recursive: true });\n\t\t\ttry {\n\t\t\t\tconst exists = await Bun.file(absOut).exists();\n\t\t\t\tif (!exists) await writeFile(absOut, code, 'utf-8');\n\t\t\t} catch {}\n\n\t\t\t// Meta via source import (not bundled)\n\t\t\tlet meta: Doc = {};\n\t\t\ttry {\n\t\t\t\tconsole.log(`[reroute/content] meta ${absSrc}`);\n\t\t\t\tconst url = `${pathToFileURL(absSrc).href}?t=${Date.now()}`;\n\t\t\t\tconst m = await import(url);\n\t\t\t\tmeta = (m as Doc).meta || {};\n\t\t\t} catch {}\n\n\t\t\tresults.push({\n\t\t\t\tcollection,\n\t\t\t\tname,\n\t\t\t\tslug: name,\n\t\t\t\thref: `/${collection}/${name}`,\n\t\t\t\tmoduleUrl: (\n\t\t\t\t\t'/' +\n\t\t\t\t\tchunkRelDir.replace(/\\\\/g, '/') +\n\t\t\t\t\t'/' +\n\t\t\t\t\toutFile\n\t\t\t\t).replace(/\\\\+/g, '/'),\n\t\t\t\tmeta,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Write .reroute/content.ts (types for tooling only)\n\tconst lines: string[] = [];\n\tlines.push('// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨');\n\tlines.push('/* eslint-disable */');\n\tlines.push('// @ts-nocheck');\n\tlines.push('');\n\tlines.push('export const contents = [');\n\tfor (const e of results) {\n\t\tlines.push(\n\t\t\t\" { collection: '\" +\n\t\t\t\te.collection +\n\t\t\t\t\"', slug: '\" +\n\t\t\t\te.slug +\n\t\t\t\t\"', name: '\" +\n\t\t\t\te.name +\n\t\t\t\t\"', href: '\" +\n\t\t\t\te.href +\n\t\t\t\t\"', module: '\" +\n\t\t\t\te.moduleUrl +\n\t\t\t\t\"', meta: \" +\n\t\t\t\tJSON.stringify(e.meta || {}) +\n\t\t\t\t' },',\n\t\t);\n\t}\n\tlines.push('] as const;');\n\tlines.push('');\n\tlines.push('export const byCollection: Record<string, any[]> = {};');\n\tlines.push(\n\t\t'for (const c of contents) { (byCollection[c.collection] ||= []).push(c as any); }',\n\t);\n\tlines.push('');\n\tlines.push(\n\t\t'export const byCollectionAndName: Record<string, Record<string, any>> = {};',\n\t);\n\tlines.push(\n\t\t'for (const c of contents) { ((byCollectionAndName[c.collection] ||= {})[c.name] = c as any); }',\n\t);\n\tlines.push('');\n\tlines.push('export type Collections = keyof typeof byCollection;');\n\tlines.push(\n\t\t'export type Names<C extends Collections> = keyof (typeof byCollectionAndName)[C];',\n\t);\n\tlines.push('export type ContentEntry = (typeof contents)[number];');\n\tlines.push('');\n\tlines.push(\n\t\t'export function getContentEntry<C extends string, N extends string>(collection: C, name: N) {',\n\t);\n\tlines.push(' const m = (byCollectionAndName as any)[collection];');\n\tlines.push(' return m ? (m as Record<string, any>)[name] : undefined;');\n\tlines.push('}');\n\tlines.push('');\n\n\tawait mkdir(join(cwd, '.reroute'), { recursive: true });\n\tawait writeFile(join(cwd, OUTPUT_CONTENT_TS), lines.join('\\n'), 'utf-8');\n\tconsole.log(`[reroute/content] wrote ${join(cwd, OUTPUT_CONTENT_TS)}`);\n\n\t// Write per-collection runtime ESM files under .reroute/collections/<collection>.js\n\tconst collectionsSet = new Set(results.map((r) => r.collection));\n\tawait mkdir(join(cwd, OUTPUT_COLLECTIONS_DIR), { recursive: true });\n\tfor (const collection of collectionsSet) {\n\t\tconst items = results.filter((r) => r.collection === collection);\n\t\tconst js: string[] = [];\n\t\tjs.push('// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨');\n\t\tjs.push('');\n\t\tjs.push('export const items = [');\n\t\tfor (const e of items) {\n\t\t\tjs.push(\n\t\t\t\t` { collection: '${e.collection}', slug: '${e.slug}', name: '${e.name}', href: '${e.href}', module: '${e.moduleUrl}', meta: ${JSON.stringify(e.meta || {})} },`,\n\t\t\t);\n\t\t}\n\t\tjs.push('];');\n\t\tjs.push('');\n\t\tjs.push('export const byName = {};');\n\t\tjs.push('for (const it of items) { byName[it.name] = it; }');\n\t\tjs.push('');\n\t\tjs.push('export function get(collectionName, name) {');\n\t\tjs.push(` if (collectionName !== '${collection}') return undefined;`);\n\t\tjs.push(' return byName[name];');\n\t\tjs.push('}');\n\t\tjs.push('');\n\n\t\tawait writeFile(\n\t\t\tjoin(cwd, OUTPUT_COLLECTIONS_DIR, `${collection}.js`),\n\t\t\tjs.join('\\n'),\n\t\t\t'utf-8',\n\t\t);\n\t\tconsole.log(\n\t\t\t`[reroute/content] wrote ${join(cwd, OUTPUT_COLLECTIONS_DIR, `${collection}.js`)}`,\n\t\t);\n\t}\n}\n\nasync function generate(cwd: string) {\n\tconsole.log('[reroute/gen] Starting generation...');\n\n\t// Cleanup old generated files due to SSR issues\n\tawait cleanupOutputDir(cwd);\n\n\t// Routes\n\tconst routesPath = join(cwd, ROUTES_DIR);\n\ttry {\n\t\tconst files = await scanDirectory(routesPath);\n\t\tconst nfFiles = await scan404Files(routesPath);\n\t\tconst all = Array.from(new Set([...files, ...nfFiles]));\n\t\tconst tree = generateRouteTree(all.map((f) => f.replace(/\\\\/g, '/')));\n\t\tconst ts = generateTypeScript(tree);\n\t\tawait mkdir(join(cwd, '.reroute'), { recursive: true });\n\t\tawait writeFile(join(cwd, OUTPUT_ROUTES), ts, 'utf-8');\n\t\tconsole.log(`[reroute/gen] Generated routes: ${join(cwd, OUTPUT_ROUTES)}`);\n\t} catch (error) {\n\t\tconsole.error('[reroute/gen] Failed to generate routes:', error);\n\t\tthrow error;\n\t}\n\n\t// Content\n\ttry {\n\t\tawait buildContentChunks(cwd);\n\t\tconsole.log(\n\t\t\t`[reroute/gen] Generated content: ${join(cwd, OUTPUT_CONTENT_TS)} + collections/*.js`,\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('[reroute/gen] Failed to generate content:', error);\n\t\tthrow error;\n\t}\n\n\t// Write .reroute/index.ts aggregator\n\tconst indexLines: string[] = [];\n\tindexLines.push('// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨');\n\tindexLines.push('/* eslint-disable */');\n\tindexLines.push('// @ts-nocheck');\n\tindexLines.push('');\n\tindexLines.push(\n\t\t\"import { layouts, matchRoute, notFoundRoutes } from './routes';\",\n\t);\n\tindexLines.push('');\n\tindexLines.push('export const artifacts = {');\n\tindexLines.push(' layouts,');\n\tindexLines.push(' matchRoute,');\n\tindexLines.push(' notFoundRoutes,');\n\tindexLines.push(\" contentBaseUrl: '/.reroute/collections'\");\n\tindexLines.push('} as const;');\n\tindexLines.push('');\n\tindexLines.push('export type RerouteArtifacts = typeof artifacts;');\n\n\tawait writeFile(join(cwd, OUTPUT_INDEX), indexLines.join('\\n'), 'utf-8');\n\n\tconsole.log(`[reroute/gen] Generated index: ${join(cwd, OUTPUT_INDEX)}`);\n\tconsole.log('[reroute/gen] ✅ Generation complete!');\n}\n\nexport default async function gen(args: string[]) {\n\tconst cwd = process.cwd();\n\tconst watchMode = args.includes('--watch') || args.includes('-w');\n\n\tif (!watchMode) {\n\t\tawait generate(cwd);\n\t\tinitTailwind(cwd);\n\t\treturn;\n\t}\n\n\tconsole.log('[reroute/gen] Watch mode enabled');\n\tconsole.log('[reroute/gen] Initial generation...');\n\tawait generate(cwd);\n\n\ttry {\n\t\tawait buildTailwind(cwd);\n\t} catch {}\n\n\t// Helper: notify server to reload connected browsers (best-effort)\n\tconst notifyReload = async (reason: string) => {\n\t\tconst ports = [\n\t\t\tNumber(process.env.PORT || '0') || 0,\n\t\t\tNumber(process.env.REROUTE_PORT || '0') || 0,\n\t\t\t3001,\n\t\t\t3000,\n\t\t].filter(Boolean) as number[];\n\t\tfor (const p of ports) {\n\t\t\ttry {\n\t\t\t\tawait fetch(`http://localhost:${p}/__reroute_reload`, {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t});\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[reroute/gen] reload notified (port ${p})${reason ? `: ${reason}` : ''}`,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t} catch {}\n\t\t}\n\t};\n\n\t// Watch routes for generation + Tailwind rebuild\n\tconst routesPath = join(cwd, ROUTES_DIR);\n\tconsole.log(`[reroute/gen] Watching ${routesPath} for changes...`);\n\tlet debounce: NodeJS.Timeout | null = null;\n\tconst routesWatcher = watch(\n\t\troutesPath,\n\t\t{ recursive: true },\n\t\t(_ev, filename) => {\n\t\t\tif (!filename) return;\n\t\t\tif (debounce) clearTimeout(debounce);\n\t\t\tdebounce = setTimeout(async () => {\n\t\t\t\tconsole.log('[reroute/gen] Change detected, regenerating...');\n\t\t\t\ttry {\n\t\t\t\t\tawait generate(cwd);\n\t\t\t\t\tawait buildTailwind(cwd);\n\t\t\t\t\tawait notifyReload('routes change');\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error('[reroute/gen] Error during regeneration:', e);\n\t\t\t\t}\n\t\t\t}, 120);\n\t\t},\n\t);\n\n\t// Watch src/client for Tailwind-related changes\n\tconst clientPath = join(cwd, 'src', 'client');\n\tconsole.log(\n\t\t`[reroute/gen] Watching ${clientPath} for Tailwind class changes...`,\n\t);\n\tlet twDebounce: NodeJS.Timeout | null = null;\n\tconst twWatcher = watch(clientPath, { recursive: true }, (_ev, filename) => {\n\t\tif (!filename) return;\n\t\tconst name = String(filename);\n\t\tif (name.includes('.reroute') || name.includes('node_modules')) return;\n\t\tif (name.includes('routes/') || name.includes('routes\\\\')) return;\n\t\tif (!/\\.(tsx|ts|jsx|js|html|md|mdx|css)$/.test(name)) return;\n\t\tif (twDebounce) clearTimeout(twDebounce);\n\t\ttwDebounce = setTimeout(async () => {\n\t\t\ttry {\n\t\t\t\tawait buildTailwind(cwd);\n\t\t\t\tawait notifyReload('client change');\n\t\t\t} catch {}\n\t\t}, 150);\n\t});\n\n\t// Keep process running until SIGINT\n\tprocess.on('SIGINT', () => {\n\t\tconsole.log('\\n[reroute/gen] Stopping watch mode...');\n\t\ttry {\n\t\t\troutesWatcher.close();\n\t\t} catch {}\n\t\ttry {\n\t\t\ttwWatcher.close();\n\t\t} catch {}\n\t\tprocess.exit(0);\n\t});\n}\n",
|
|
10
|
-
"#!/usr/bin/env bun\n\n/**\n * Reroute CLI\n *\n * Command-line interface for Reroute framework operations.\n */\n\nconst commands = {\n\tinit: () => import('./commands/init'),\n\tbuild: () => import('./commands/build'),\n\tdev: () => import('./commands/dev'),\n\tgen: () => import('./commands/gen'),\n};\n\ntype Command = keyof typeof commands;\n\nasync function main() {\n\tconst args = process.argv.slice(2);\n\n\tif (args.length === 0 || args[0] === '--help' || args[0] === '-h') {\n\t\tprintHelp();\n\t\tprocess.exit(0);\n\t}\n\n\tconst command = args[0] as Command;\n\n\tif (!commands[command]) {\n\t\tconsole.error(`Unknown command: ${command}`);\n\t\tconsole.error('');\n\t\tprintHelp();\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\tconst module = await commands[command]();\n\t\tawait module.default(args.slice(1));\n\t} catch (error) {\n\t\tconsole.error('Error executing command:', error);\n\t\tprocess.exit(1);\n\t}\n}\n\nfunction printHelp() {\n\tconsole.log('Reroute CLI - File-based routing framework');\n\tconsole.log('');\n\tconsole.log('Usage:');\n\tconsole.log(' reroute <command> [options]');\n\tconsole.log('');\n\tconsole.log('Commands:');\n\tconsole.log(' gen Generate content registry and static assets');\n\tconsole.log(' init Scaffold a new Reroute project');\n\tconsole.log(' build Build for production');\n\tconsole.log(' dev Start development server');\n\tconsole.log('');\n\tconsole.log('Options:');\n\tconsole.log(' -h, --help
|
|
10
|
+
"#!/usr/bin/env bun\n\n/**\n * Reroute CLI\n *\n * Command-line interface for Reroute framework operations.\n */\n\nimport path from 'node:path';\n\nconst commands = {\n\tinit: () => import('./commands/init'),\n\tbuild: () => import('./commands/build'),\n\tdev: () => import('./commands/dev'),\n\tgen: () => import('./commands/gen'),\n};\n\ntype Command = keyof typeof commands;\n\nasync function main() {\n\tconst args = process.argv.slice(2);\n\n\tif (args[0] === '--version' || args[0] === '-v') {\n\t\tconst version = await getVersion();\n\t\tconsole.log(version);\n\t\tprocess.exit(0);\n\t}\n\n\tif (args.length === 0 || args[0] === '--help' || args[0] === '-h') {\n\t\tprintHelp();\n\t\tprocess.exit(0);\n\t}\n\n\tconst command = args[0] as Command;\n\n\tif (!commands[command]) {\n\t\tconsole.error(`Unknown command: ${command}`);\n\t\tconsole.error('');\n\t\tprintHelp();\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\tconst module = await commands[command]();\n\t\tawait module.default(args.slice(1));\n\t} catch (error) {\n\t\tconsole.error('Error executing command:', error);\n\t\tprocess.exit(1);\n\t}\n}\n\nfunction printHelp() {\n\tconsole.log('Reroute CLI - File-based routing framework');\n\tconsole.log('');\n\tconsole.log('Usage:');\n\tconsole.log(' reroute <command> [options]');\n\tconsole.log('');\n\tconsole.log('Commands:');\n\tconsole.log(' gen Generate content registry and static assets');\n\tconsole.log(' init Scaffold a new Reroute project');\n\tconsole.log(' build Build for production');\n\tconsole.log(' dev Start development server');\n\tconsole.log('');\n\tconsole.log('Options:');\n\tconsole.log(' -h, --help Show help');\n\tconsole.log(' -v, --version Show version');\n\tconsole.log('');\n\tconsole.log('Examples:');\n\tconsole.log(' reroute gen');\n\tconsole.log(' reroute gen --watch');\n\tconsole.log(' reroute init my-app');\n\tconsole.log(' reroute build --minify');\n\tconsole.log(' reroute dev --port 3000');\n}\n\nasync function getVersion(): Promise<string> {\n\t// In development: packages/cli/src/cli.ts -> ../../../package.json\n\t// In production: dist/cli/bin.js -> ../package.json\n\tconst possiblePaths = [\n\t\tpath.join(import.meta.dir, '../../../package.json'),\n\t\tpath.join(import.meta.dir, '../package.json'),\n\t];\n\n\tfor (const pkgPath of possiblePaths) {\n\t\ttry {\n\t\t\tconst pkg = await Bun.file(pkgPath).json();\n\t\t\treturn pkg.version;\n\t\t} catch {}\n\t}\n\n\treturn 'unknown';\n}\n\nmain();\n"
|
|
11
11
|
],
|
|
12
|
-
"mappings": "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",
|
|
13
|
-
"debugId": "
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "6AFDAF7BCD23E07864756E2164756E21",
|
|
14
14
|
"names": []
|
|
15
15
|
}
|
package/cli/src/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../../../packages/cli/src/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../../../packages/cli/src/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG"}
|
package/elysia/index.js
CHANGED
|
@@ -1331,11 +1331,13 @@ function registerSSRRoutes(app, options) {
|
|
|
1331
1331
|
appId = "root",
|
|
1332
1332
|
collections,
|
|
1333
1333
|
minify = false,
|
|
1334
|
+
maxAge = 3600,
|
|
1335
|
+
directive = "public",
|
|
1334
1336
|
dataCacheControl,
|
|
1335
1337
|
shouldIgnorePathname
|
|
1336
1338
|
} = options;
|
|
1337
1339
|
for (const collection of collections) {
|
|
1338
|
-
app.get(`/${collection}/*`, async ({ request }) => {
|
|
1340
|
+
app.get(`/${collection}/*`, async ({ request, headers }) => {
|
|
1339
1341
|
const method = request.method || "GET";
|
|
1340
1342
|
if (method !== "GET")
|
|
1341
1343
|
throw new NotFoundError4;
|
|
@@ -1357,11 +1359,14 @@ function registerSSRRoutes(app, options) {
|
|
|
1357
1359
|
appId,
|
|
1358
1360
|
minify
|
|
1359
1361
|
});
|
|
1360
|
-
|
|
1362
|
+
const acceptEncoding = headers["accept-encoding"] || "";
|
|
1363
|
+
const { body, extraHeaders } = gzipIfAccepted(result.html, "text/html; charset=utf-8", acceptEncoding);
|
|
1364
|
+
return new Response(body, {
|
|
1361
1365
|
status: result.status,
|
|
1362
1366
|
headers: {
|
|
1363
1367
|
"content-type": "text/html; charset=utf-8",
|
|
1364
|
-
|
|
1368
|
+
"cache-control": isWatchMode2 ? "no-cache" : `${directive}, max-age=${maxAge}`,
|
|
1369
|
+
...extraHeaders
|
|
1365
1370
|
}
|
|
1366
1371
|
});
|
|
1367
1372
|
} catch (e) {
|
|
@@ -1415,9 +1420,18 @@ function registerSSRRoutes(app, options) {
|
|
|
1415
1420
|
appId,
|
|
1416
1421
|
minify
|
|
1417
1422
|
});
|
|
1423
|
+
const acceptEncoding = request.headers.get("accept-encoding") || "";
|
|
1424
|
+
const { body, extraHeaders } = gzipIfAccepted(result.html, "text/html; charset=utf-8", acceptEncoding);
|
|
1418
1425
|
set.status = result.status;
|
|
1419
1426
|
set.headers["content-type"] = "text/html; charset=utf-8";
|
|
1420
|
-
|
|
1427
|
+
set.headers["cache-control"] = isWatchMode2 ? "no-cache" : `${directive}, max-age=${maxAge}`;
|
|
1428
|
+
if (extraHeaders["Content-Encoding"]) {
|
|
1429
|
+
set.headers["content-encoding"] = extraHeaders["Content-Encoding"];
|
|
1430
|
+
}
|
|
1431
|
+
if (extraHeaders.Vary) {
|
|
1432
|
+
set.headers.vary = extraHeaders.Vary;
|
|
1433
|
+
}
|
|
1434
|
+
return new Response(body);
|
|
1421
1435
|
} catch {}
|
|
1422
1436
|
}
|
|
1423
1437
|
}
|
|
@@ -1596,10 +1610,12 @@ function registerStaticRoutes(app, options) {
|
|
|
1596
1610
|
const content2 = new Uint8Array(contentBuf);
|
|
1597
1611
|
const contentType = getMimeType(actualFilePath);
|
|
1598
1612
|
const { body, extraHeaders } = gzipIfAccepted(content2, contentType, headers["accept-encoding"]);
|
|
1613
|
+
const isLongLivedAsset = contentType.startsWith("image/") || contentType.startsWith("font/") || contentType.includes("woff") || contentType.includes("ttf") || contentType.includes("otf");
|
|
1614
|
+
const cacheMaxAge = maxAge === 0 ? 0 : isLongLivedAsset ? 31536000 : maxAge;
|
|
1599
1615
|
const response = new Response(body, {
|
|
1600
1616
|
headers: {
|
|
1601
1617
|
"Content-Type": contentType,
|
|
1602
|
-
"Cache-Control":
|
|
1618
|
+
"Cache-Control": cacheMaxAge > 0 ? `${directive}, max-age=${cacheMaxAge}${isLongLivedAsset ? ", immutable" : ""}` : "no-cache",
|
|
1603
1619
|
...extraHeaders,
|
|
1604
1620
|
...staticHeaders
|
|
1605
1621
|
}
|
|
@@ -1731,6 +1747,8 @@ var reroute = (options = {}) => async (app) => {
|
|
|
1731
1747
|
appId: ssrAppId,
|
|
1732
1748
|
collections,
|
|
1733
1749
|
minify,
|
|
1750
|
+
maxAge,
|
|
1751
|
+
directive,
|
|
1734
1752
|
dataCacheControl,
|
|
1735
1753
|
shouldIgnorePathname: (pathname) => {
|
|
1736
1754
|
if (!ignorePatterns.length)
|
|
@@ -1759,4 +1777,4 @@ export {
|
|
|
1759
1777
|
reroute
|
|
1760
1778
|
};
|
|
1761
1779
|
|
|
1762
|
-
//# debugId=
|
|
1780
|
+
//# debugId=CF28F664748EC3F964756E2164756E21
|