reroute-js 0.6.0 → 0.7.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.
Files changed (114) hide show
  1. package/README.md +1 -0
  2. package/_/basic/package.json +4 -4
  3. package/_/basic/src/client/index.html +1 -1
  4. package/_/basic/src/index.ts +1 -3
  5. package/_/blog/package.json +4 -4
  6. package/_/blog/src/client/App.tsx +1 -0
  7. package/_/blog/src/client/index.html +1 -1
  8. package/_/blog/src/client/routes/blog/content/1-hello-world.tsx +1 -1
  9. package/_/blog/src/client/routes/blog/content/3-markdown-with-syntax-highlighting.mdx +213 -0
  10. package/_/blog/src/client/routes/blog/content/4-content-in-markdown.md +143 -0
  11. package/_/blog/src/client/routes/blog/content/5-mdx-with-components.mdx +267 -0
  12. package/_/blog/src/client/routes/blog/index.tsx +59 -0
  13. package/_/blog/src/client/routes/client.tsx +564 -0
  14. package/_/blog/src/client/routes/docs.tsx +670 -0
  15. package/_/blog/src/client/routes/index.tsx +37 -0
  16. package/_/blog/src/client/routes/markdown-demo.md +169 -0
  17. package/_/blog/src/client/routes/markdown.tsx +160 -0
  18. package/_/blog/src/index.ts +5 -2
  19. package/_/store/package.json +4 -4
  20. package/_/store/src/client/index.html +1 -1
  21. package/_/store/src/index.ts +1 -1
  22. package/cli/bin.d.ts +1 -1
  23. package/cli/bin.js +806 -14
  24. package/cli/bin.js.map +11 -7
  25. package/cli/index.d.ts +1 -1
  26. package/cli/index.js +52 -3
  27. package/cli/index.js.map +4 -3
  28. package/cli/src/cli.d.ts +1 -1
  29. package/cli/src/commands/boot.d.ts +1 -1
  30. package/cli/src/commands/build.d.ts +19 -0
  31. package/cli/src/commands/build.d.ts.map +1 -0
  32. package/cli/src/commands/dev.d.ts +18 -0
  33. package/cli/src/commands/dev.d.ts.map +1 -0
  34. package/cli/src/commands/gen.d.ts +1 -1
  35. package/cli/src/commands/init.d.ts +1 -1
  36. package/cli/src/commands/start.d.ts +19 -0
  37. package/cli/src/commands/start.d.ts.map +1 -0
  38. package/cli/src/libs/index.d.ts +2 -1
  39. package/cli/src/libs/index.d.ts.map +1 -1
  40. package/cli/src/libs/log.d.ts +46 -0
  41. package/cli/src/libs/log.d.ts.map +1 -0
  42. package/cli/src/libs/markdown-processor.d.ts +1 -1
  43. package/cli/src/libs/markdown.d.ts +1 -1
  44. package/cli/src/libs/tailwind.d.ts +1 -1
  45. package/cli/src/libs/version.d.ts +1 -1
  46. package/core/index.d.ts +1 -1
  47. package/core/index.js +5 -5
  48. package/core/index.js.map +3 -3
  49. package/core/src/bundler/hash.d.ts +1 -1
  50. package/core/src/bundler/index.d.ts +1 -1
  51. package/core/src/bundler/transpile.d.ts +1 -1
  52. package/core/src/content/discovery.d.ts +1 -1
  53. package/core/src/content/index.d.ts +1 -1
  54. package/core/src/content/metadata.d.ts +1 -1
  55. package/core/src/content/registry.d.ts +1 -1
  56. package/core/src/index.d.ts +1 -1
  57. package/core/src/ssr/data.d.ts +1 -1
  58. package/core/src/ssr/index.d.ts +1 -1
  59. package/core/src/ssr/modules.d.ts +1 -1
  60. package/core/src/ssr/render.d.ts +1 -1
  61. package/core/src/ssr/seed.d.ts +1 -1
  62. package/core/src/template/html.d.ts +1 -1
  63. package/core/src/template/index.d.ts +1 -1
  64. package/core/src/types.d.ts +1 -1
  65. package/core/src/utils/cache.d.ts +1 -1
  66. package/core/src/utils/compression.d.ts +1 -1
  67. package/core/src/utils/index.d.ts +1 -1
  68. package/core/src/utils/mime.d.ts +1 -1
  69. package/core/src/utils/path.d.ts +1 -1
  70. package/elysia/index.d.ts +1 -1
  71. package/elysia/index.js +5 -5
  72. package/elysia/index.js.map +3 -3
  73. package/elysia/src/index.d.ts +1 -1
  74. package/elysia/src/libs/http.d.ts +1 -1
  75. package/elysia/src/libs/image.d.ts +1 -1
  76. package/elysia/src/plugin.d.ts +1 -1
  77. package/elysia/src/routes/artifacts.d.ts +1 -1
  78. package/elysia/src/routes/content.d.ts +1 -1
  79. package/elysia/src/routes/dev.d.ts +1 -1
  80. package/elysia/src/routes/image.d.ts +1 -1
  81. package/elysia/src/routes/ssr.d.ts +1 -1
  82. package/elysia/src/routes/static.d.ts +1 -1
  83. package/elysia/src/types.d.ts +1 -1
  84. package/package.json +6 -1
  85. package/react/index.d.ts +1 -1
  86. package/react/index.js +50 -24
  87. package/react/index.js.map +3 -3
  88. package/react/src/components/ClientOnly.d.ts +1 -1
  89. package/react/src/components/ContentRoute.d.ts +1 -1
  90. package/react/src/components/Image.d.ts +1 -1
  91. package/react/src/components/Link.d.ts +1 -1
  92. package/react/src/components/Markdown.d.ts +1 -1
  93. package/react/src/components/Outlet.d.ts +1 -1
  94. package/react/src/components/index.d.ts +1 -1
  95. package/react/src/hooks/index.d.ts +1 -1
  96. package/react/src/hooks/useContent.d.ts +1 -1
  97. package/react/src/hooks/useData.d.ts +1 -1
  98. package/react/src/hooks/useNavigate.d.ts +1 -1
  99. package/react/src/hooks/useParams.d.ts +1 -1
  100. package/react/src/hooks/useRouter.d.ts +1 -1
  101. package/react/src/hooks/useSearchParams.d.ts +1 -1
  102. package/react/src/index.d.ts +1 -1
  103. package/react/src/providers/ContentProvider.d.ts +1 -1
  104. package/react/src/providers/RerouteProvider.d.ts +1 -1
  105. package/react/src/providers/RouterProvider.d.ts +1 -1
  106. package/react/src/providers/RouterProvider.d.ts.map +1 -1
  107. package/react/src/providers/index.d.ts +1 -1
  108. package/react/src/types/any.d.ts +1 -1
  109. package/react/src/types/index.d.ts +1 -1
  110. package/react/src/types/router.d.ts +1 -1
  111. package/react/src/utils/content.d.ts +1 -1
  112. package/react/src/utils/head.d.ts +1 -1
  113. package/react/src/utils/index.d.ts +1 -1
  114. package/_/blog/src/client/components/Counter.tsx +0 -14
package/README.md CHANGED
@@ -14,6 +14,7 @@ Reroute is a dead-simple file-based routing framework for building full-stack Re
14
14
  ### 🛠️ CLI Tools
15
15
  - 🚀 **`reroute init`** - Scaffold new projects with templates (basic, blog, store)
16
16
  - 🔨 **`reroute gen`** - Generate content registry and route artifacts
17
+ - ⚡ **`reroute dev`** - Start development environment with side-by-side logs and colored output
17
18
 
18
19
  ### 📄 Content Management
19
20
  - 📚 **Content Collections** - Organize content by collections (blog posts, docs, etc.)
@@ -3,10 +3,10 @@
3
3
  "description": "A Reroute application",
4
4
  "version": "0.0.0",
5
5
  "scripts": {
6
- "postinstall": "reroute-js boot",
7
- "start": "reroute gen && bun src/index.ts",
8
- "dev": "reroute gen --watch & bun --watch src/index.ts",
9
- "build": "reroute gen && bun build src/index.ts --target bun --compile --outfile ./dist/app"
6
+ "types": "tsc --noEmit",
7
+ "start": "reroute start",
8
+ "dev": "reroute dev",
9
+ "build": "reroute build"
10
10
  },
11
11
  "private": true,
12
12
  "dependencies": {
@@ -2,7 +2,7 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
- <title>{{PROJECT_NAME}}</title>
5
+ <title>Reroute Basic Example</title>
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  </head>
8
8
  <body>
@@ -15,6 +15,4 @@ const app = new Elysia()
15
15
  .get('/api/message', () => ({ message: 'Hello from server' }))
16
16
  .listen(Number(Bun.env.PORT || '3000'));
17
17
 
18
- console.log(
19
- `🦊 Reroute is running at ${app.server?.hostname}:${app.server?.port}`,
20
- );
18
+ console.log(`[reroute] Running at ${app.server?.hostname}:${app.server?.port}`);
@@ -3,10 +3,10 @@
3
3
  "description": "A Reroute application",
4
4
  "version": "0.0.0",
5
5
  "scripts": {
6
- "postinstall": "reroute-js boot",
7
- "start": "reroute gen && bun src/index.ts",
8
- "dev": "reroute gen --watch & bun --watch src/index.ts",
9
- "build": "reroute gen && bun build src/index.ts --target bun --compile --outfile ./dist/app"
6
+ "types": "tsc --noEmit",
7
+ "start": "reroute start",
8
+ "dev": "reroute dev",
9
+ "build": "reroute build"
10
10
  },
11
11
  "private": true,
12
12
  "dependencies": {
@@ -6,5 +6,6 @@ interface AppProps {
6
6
  }
7
7
 
8
8
  export default function App({ pathname }: AppProps = {}) {
9
+ console.log('[app] app mounted');
9
10
  return <RerouteProvider from={{ pathname, ...artifacts }} />;
10
11
  }
@@ -2,7 +2,7 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
- <title>{{PROJECT_NAME}}</title>
5
+ <title>Reroute App</title>
6
6
 
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
8
  </head>
@@ -18,7 +18,7 @@ function BlogPost() {
18
18
  return (
19
19
  <div>
20
20
  <h1>Hello World</h1>
21
- <p>Welcome to my blog!!</p>
21
+ <p>Welcome to my blog!!!</p>
22
22
  </div>
23
23
  );
24
24
  }
@@ -0,0 +1,213 @@
1
+ ---
2
+ title: Markdown with Syntax Highlighting
3
+ description: Learn how to use markdown with beautiful syntax highlighting powered by Shiki
4
+ excerpt: A complete guide to using markdown in Reroute with Shiki syntax highlighting
5
+ date: 2025-11-04
6
+ ---
7
+
8
+ # Markdown with Syntax Highlighting
9
+
10
+ Reroute now supports **native markdown rendering** with beautiful syntax highlighting powered by [Shiki](https://shiki.style/)!
11
+
12
+ ## Features
13
+
14
+ - ✅ **GitHub Flavored Markdown** - Tables, task lists, strikethrough, and more
15
+ - ✅ **Syntax Highlighting** - Powered by Shiki with VS Code themes
16
+ - ✅ **Zero Config** - Works out of the box when packages are installed
17
+ - ✅ **Optional** - Only included when you need it
18
+
19
+ ## Installation
20
+
21
+ To use markdown in your Reroute project:
22
+
23
+ ```bash
24
+ # Required: Markdown renderer
25
+ bun add react-markdown
26
+
27
+ # Optional: GitHub Flavored Markdown support
28
+ bun add remark-gfm
29
+
30
+ # Optional: Syntax highlighting
31
+ bun add -d @shikijs/rehype
32
+ ```
33
+
34
+ ## Basic Usage
35
+
36
+ Import the Markdown component and pass your content as children:
37
+
38
+ ```tsx
39
+ import { Markdown } from 'reroute-js/react';
40
+
41
+ export default function MyPost() {
42
+ return (
43
+ <Markdown>
44
+ {/* Your markdown content here */}
45
+ # Hello World
46
+ This is **bold** and this is *italic*.
47
+ </Markdown>
48
+ );
49
+ }
50
+ ```
51
+
52
+ ## Code Highlighting
53
+
54
+ Shiki provides beautiful syntax highlighting for many languages:
55
+
56
+ ### TypeScript Example
57
+
58
+ ```typescript
59
+ interface User {
60
+ id: number;
61
+ name: string;
62
+ email: string;
63
+ }
64
+
65
+ async function fetchUser(id: number): Promise<User> {
66
+ const response = await fetch(`/api/users/${id}`);
67
+ return response.json();
68
+ }
69
+ ```
70
+
71
+ ### React Component
72
+
73
+ ```tsx
74
+ import { useState } from 'react';
75
+ import { Link } from 'reroute-js/react';
76
+
77
+ export default function Counter() {
78
+ const [count, setCount] = useState(0);
79
+
80
+ return (
81
+ <div>
82
+ <h2>Count: {count}</h2>
83
+ <button onClick={() => setCount(count + 1)}>
84
+ Increment
85
+ </button>
86
+ <Link to="/">Home</Link>
87
+ </div>
88
+ );
89
+ }
90
+ ```
91
+
92
+ ### Python Example
93
+
94
+ ```python
95
+ def fibonacci(n: int) -> list[int]:
96
+ """Generate fibonacci sequence up to n terms."""
97
+ if n <= 0:
98
+ return []
99
+ elif n == 1:
100
+ return [0]
101
+
102
+ sequence = [0, 1]
103
+ for i in range(2, n):
104
+ sequence.append(sequence[i-1] + sequence[i-2])
105
+
106
+ return sequence
107
+
108
+ # Generate first 10 fibonacci numbers
109
+ print(fibonacci(10))
110
+ ```
111
+
112
+ ## GitHub Flavored Markdown
113
+
114
+ With `remark-gfm`, you get additional features:
115
+
116
+ ### Tables
117
+
118
+ | Feature | Status | Notes |
119
+ |---------|--------|-------|
120
+ | Markdown | ✅ | react-markdown |
121
+ | Syntax Highlighting | ✅ | Shiki |
122
+ | GFM Support | ✅ | remark-gfm |
123
+ | Auto Detection | ✅ | CLI integration |
124
+
125
+ ### Task Lists
126
+
127
+ - [x] Install react-markdown
128
+ - [x] Add optional Shiki support
129
+ - [x] Create example blog post
130
+ - [ ] Write more documentation
131
+
132
+ ### Strikethrough
133
+
134
+ ~~This is outdated information~~ Use the new Markdown component instead!
135
+
136
+ ### Autolinks
137
+
138
+ Check out the docs at https://github.com/stewones/reroute
139
+
140
+ ## Advanced Configuration
141
+
142
+ You can customize the Markdown component with various options:
143
+
144
+ ```tsx
145
+ <Markdown
146
+ theme="github-light"
147
+ gfm={true}
148
+ highlight={true}
149
+ className="prose prose-slate"
150
+ >
151
+ {markdownContent}
152
+ </Markdown>
153
+ ```
154
+
155
+ ## Custom Components
156
+
157
+ Override default HTML elements with your own components:
158
+
159
+ ```tsx
160
+ <Markdown
161
+ components={{
162
+ h1: ({ children }) => (
163
+ <h1 className="text-4xl font-bold mb-4">
164
+ {children}
165
+ </h1>
166
+ ),
167
+ a: ({ href, children }) => (
168
+ <Link to={href} className="text-blue-500 hover:underline">
169
+ {children}
170
+ </Link>
171
+ ),
172
+ }}
173
+ >
174
+ {content}
175
+ </Markdown>
176
+ ```
177
+
178
+ ## Performance
179
+
180
+ The Markdown component uses dynamic imports to avoid bundling dependencies you don't need:
181
+
182
+ - **react-markdown**: Only loaded if you use the component
183
+ - **remark-gfm**: Only loaded if GFM features are enabled
184
+ - **shiki**: Only loaded if syntax highlighting is enabled
185
+
186
+ This keeps your bundle size minimal! 📦
187
+
188
+ ## Integration with Content Collections
189
+
190
+ Markdown works seamlessly with Reroute's content system:
191
+
192
+ ```tsx
193
+ import { useContent } from 'reroute-js/react';
194
+ import { Markdown } from 'reroute-js/react';
195
+
196
+ export default function BlogPost() {
197
+ const posts = useContent('blog');
198
+ const post = posts[0];
199
+
200
+ return (
201
+ <article>
202
+ <h1>{post.meta.title}</h1>
203
+ <Markdown>{post.content}</Markdown>
204
+ </article>
205
+ );
206
+ }
207
+ ```
208
+
209
+ ## Conclusion
210
+
211
+ With markdown support, Reroute makes it easy to create content-rich applications with beautiful code examples. The optional nature of the dependencies means you only pay for what you use!
212
+
213
+ Happy writing! 🎉
@@ -0,0 +1,143 @@
1
+ ---
2
+ title: Content in Markdown
3
+ description: Learn how to use markdown files in Reroute content collections for easy blog authoring
4
+ date: 2025-11-05
5
+ excerpt: Markdown files work seamlessly in content collections - no JSX needed!
6
+ ---
7
+
8
+ # Writing Blog Posts in Markdown
9
+
10
+ This blog post is written entirely in **markdown** and lives in the `content/` directory as a `.md` file. No JSX, no React components - just pure markdown!
11
+
12
+ ## Content Collections + Markdown
13
+
14
+ Reroute's content system now supports markdown files natively. Simply drop a `.md` or `.mdx` file in your content collection directory:
15
+
16
+ ```bash
17
+ src/client/routes/blog/content/
18
+ ├── 1-hello-world.tsx # Traditional TSX
19
+ ├── 2-what-is-reroute.tsx # Traditional TSX
20
+ ├── 3-markdown-with-syntax.tsx # TSX with Markdown component
21
+ └── 4-content-in-markdown.md # 🎉 Pure markdown!
22
+ ```
23
+
24
+ ## The Best of Both Worlds
25
+
26
+ You get all the benefits of content collections:
27
+
28
+ ✅ **Automatic indexing** - Appears in `useContent('blog')`
29
+ ✅ **Frontmatter metadata** - Title, description, date, etc.
30
+ ✅ **Type-safe routing** - Works with `<ContentRoute>`
31
+ ✅ **Code splitting** - Individual chunk per post
32
+ ✅ **Syntax highlighting** - Beautiful code blocks with Shiki
33
+
34
+ But with the simplicity of markdown authoring!
35
+
36
+ ## Writing Content
37
+
38
+ ### Headings and Text
39
+
40
+ Use standard markdown syntax. Text can be **bold**, *italic*, or ***both***. You can also use ~~strikethrough~~ and `inline code`.
41
+
42
+ ### Code Blocks
43
+
44
+ Syntax highlighting works automatically:
45
+
46
+ ```typescript
47
+ import { useContent } from 'reroute-js/react';
48
+
49
+ export default function BlogIndex() {
50
+ const posts = useContent('blog');
51
+
52
+ return (
53
+ <div>
54
+ {posts.map(post => (
55
+ <article key={post.slug}>
56
+ <h2>{post.meta.title}</h2>
57
+ <p>{post.meta.excerpt}</p>
58
+ </article>
59
+ ))}
60
+ </div>
61
+ );
62
+ }
63
+ ```
64
+
65
+ ```javascript
66
+ // Works with any language
67
+ const greet = (name) => {
68
+ console.log(`Hello, ${name}!`);
69
+ };
70
+
71
+ greet('Markdown');
72
+ ```
73
+
74
+ ### Lists
75
+
76
+ **Task lists:**
77
+ - [x] Add markdown support to routes
78
+ - [x] Add markdown support to content collections
79
+ - [x] Write example blog post
80
+ - [ ] Write more posts!
81
+
82
+ **Regular lists:**
83
+ 1. Write your post in markdown
84
+ 2. Save it to the content directory
85
+ 3. Run `reroute gen`
86
+ 4. Your post is live!
87
+
88
+ ### Tables
89
+
90
+ | Feature | Markdown | TSX |
91
+ |---------|----------|-----|
92
+ | Syntax | Simple | Verbose |
93
+ | Learning Curve | Easy | React knowledge needed |
94
+ | Flexibility | Good | Excellent |
95
+ | Speed | Fast | Fast |
96
+
97
+ ### Blockquotes
98
+
99
+ > "Markdown is a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format."
100
+ > — John Gruber, creator of Markdown
101
+
102
+ ## How It Works
103
+
104
+ When you run `reroute gen`:
105
+
106
+ 1. The CLI scans for markdown files in content directories
107
+ 2. Parses frontmatter for metadata
108
+ 3. Converts to a React component wrapper
109
+ 4. Builds it like any other content file
110
+ 5. Available via `useContent()` or `<ContentRoute>`
111
+
112
+ ## When to Use Markdown
113
+
114
+ **Use markdown files when:**
115
+ - ✅ Writing blog posts or articles
116
+ - ✅ Creating documentation
117
+ - ✅ Content-focused pages
118
+ - ✅ Quick authoring without React complexity
119
+
120
+ **Use TSX files when:**
121
+ - 🎯 Need custom components or interactivity
122
+ - 🎯 Complex layouts or data fetching
123
+ - 🎯 Dynamic content with state management
124
+ - 🎯 Integration with external APIs
125
+
126
+ ## Mixing and Matching
127
+
128
+ The beauty of Reroute is that you can mix both approaches:
129
+
130
+ ```
131
+ blog/content/
132
+ ├── simple-post.md # Pure markdown
133
+ ├── interactive-demo.tsx # Full React component
134
+ └── hybrid-post.mdx # Markdown with JSX (coming soon!)
135
+ ```
136
+
137
+ Use the right tool for each piece of content!
138
+
139
+ ## Conclusion
140
+
141
+ Markdown support in content collections makes Reroute even more powerful for content-driven sites. Write your content in the format that makes sense for each piece.
142
+
143
+ Happy blogging! 🚀