olova 2.0.39 → 2.0.41
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/README.md +305 -12
- package/dist/client.d.ts +9 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +8 -0
- package/dist/client.js.map +1 -0
- package/dist/core/config.d.ts +179 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +33 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/types.d.ts +16 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/data/hooks.d.ts +5 -0
- package/dist/data/hooks.d.ts.map +1 -0
- package/dist/data/hooks.js +19 -0
- package/dist/data/hooks.js.map +1 -0
- package/dist/data/index.d.ts +9 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +9 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/provider.d.ts +10 -0
- package/dist/data/provider.d.ts.map +1 -0
- package/dist/data/provider.js +10 -0
- package/dist/data/provider.js.map +1 -0
- package/dist/data/serialize.d.ts +10 -0
- package/dist/data/serialize.d.ts.map +1 -0
- package/dist/data/serialize.js +16 -0
- package/dist/data/serialize.js.map +1 -0
- package/dist/data/types.d.ts +9 -0
- package/dist/data/types.d.ts.map +1 -0
- package/dist/data/types.js +2 -0
- package/dist/data/types.js.map +1 -0
- package/dist/head/Head.d.ts +8 -0
- package/dist/head/Head.d.ts.map +1 -0
- package/dist/head/Head.js +56 -0
- package/dist/head/Head.js.map +1 -0
- package/dist/head/HeadProvider.d.ts +31 -0
- package/dist/head/HeadProvider.d.ts.map +1 -0
- package/dist/head/HeadProvider.js +17 -0
- package/dist/head/HeadProvider.js.map +1 -0
- package/dist/head/index.d.ts +8 -0
- package/dist/head/index.d.ts.map +1 -0
- package/dist/head/index.js +8 -0
- package/dist/head/index.js.map +1 -0
- package/dist/head/ssr.d.ts +9 -0
- package/dist/head/ssr.d.ts.map +1 -0
- package/dist/head/ssr.js +35 -0
- package/dist/head/ssr.js.map +1 -0
- package/dist/hydration/context.d.ts +14 -0
- package/dist/hydration/context.d.ts.map +1 -0
- package/dist/hydration/context.js +20 -0
- package/dist/hydration/context.js.map +1 -0
- package/dist/hydration/index.d.ts +15 -0
- package/dist/hydration/index.d.ts.map +1 -0
- package/dist/hydration/index.js +25 -0
- package/dist/hydration/index.js.map +1 -0
- package/dist/hydration/payload.d.ts +46 -0
- package/dist/hydration/payload.d.ts.map +1 -0
- package/dist/hydration/payload.js +99 -0
- package/dist/hydration/payload.js.map +1 -0
- package/dist/hydration/scheduler.d.ts +16 -0
- package/dist/hydration/scheduler.d.ts.map +1 -0
- package/dist/hydration/scheduler.js +83 -0
- package/dist/hydration/scheduler.js.map +1 -0
- package/dist/hydration/seo.d.ts +10 -0
- package/dist/hydration/seo.d.ts.map +1 -0
- package/dist/hydration/seo.js +110 -0
- package/dist/hydration/seo.js.map +1 -0
- package/dist/hydration/serialization.d.ts +30 -0
- package/dist/hydration/serialization.d.ts.map +1 -0
- package/dist/hydration/serialization.js +99 -0
- package/dist/hydration/serialization.js.map +1 -0
- package/dist/hydration/types.d.ts +104 -0
- package/dist/hydration/types.d.ts.map +1 -0
- package/dist/hydration/types.js +2 -0
- package/dist/hydration/types.js.map +1 -0
- package/dist/index.d.ts +15 -84
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/plugin/cache.d.ts +66 -0
- package/dist/plugin/cache.d.ts.map +1 -0
- package/dist/plugin/cache.js +129 -0
- package/dist/plugin/cache.js.map +1 -0
- package/dist/plugin/index.d.ts +8 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +8 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/plugin.d.ts +25 -0
- package/dist/plugin/plugin.d.ts.map +1 -0
- package/dist/plugin/plugin.js +601 -0
- package/dist/plugin/plugin.js.map +1 -0
- package/dist/router/Link.d.ts +7 -0
- package/dist/router/Link.d.ts.map +1 -0
- package/dist/router/Link.js +53 -0
- package/dist/router/Link.js.map +1 -0
- package/dist/router/Router.d.ts +7 -0
- package/dist/router/Router.d.ts.map +1 -0
- package/dist/router/Router.js +263 -0
- package/dist/router/Router.js.map +1 -0
- package/dist/router/context.d.ts +13 -0
- package/dist/router/context.d.ts.map +1 -0
- package/dist/router/context.js +47 -0
- package/dist/router/context.js.map +1 -0
- package/dist/router/hooks.d.ts +30 -0
- package/dist/router/hooks.d.ts.map +1 -0
- package/dist/router/hooks.js +59 -0
- package/dist/router/hooks.js.map +1 -0
- package/dist/router/index.d.ts +13 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +14 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/matching.d.ts +19 -0
- package/dist/router/matching.d.ts.map +1 -0
- package/dist/router/matching.js +115 -0
- package/dist/router/matching.js.map +1 -0
- package/dist/router/navigation.d.ts +26 -0
- package/dist/router/navigation.d.ts.map +1 -0
- package/dist/router/navigation.js +65 -0
- package/dist/router/navigation.js.map +1 -0
- package/dist/router/types.d.ts +61 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +6 -0
- package/dist/router/types.js.map +1 -0
- package/dist/server.d.ts +10 -16
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +7 -19
- package/dist/server.js.map +1 -1
- package/dist/streaming/html.d.ts +29 -0
- package/dist/streaming/html.d.ts.map +1 -0
- package/dist/streaming/html.js +72 -0
- package/dist/streaming/html.js.map +1 -0
- package/dist/streaming/index.d.ts +7 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +7 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/streaming/render.d.ts +32 -0
- package/dist/streaming/render.d.ts.map +1 -0
- package/dist/streaming/render.js +83 -0
- package/dist/streaming/render.js.map +1 -0
- package/dist/streaming/utils.d.ts +30 -0
- package/dist/streaming/utils.d.ts.map +1 -0
- package/dist/streaming/utils.js +61 -0
- package/dist/streaming/utils.js.map +1 -0
- package/package.json +43 -35
- package/dist/router.d.ts +0 -3
- package/dist/router.js +0 -229
- package/dist/router.js.map +0 -1
- package/dist/vite.d.ts +0 -98
- package/dist/vite.js +0 -1828
- package/dist/vite.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,17 +1,310 @@
|
|
|
1
|
-
# Olova
|
|
1
|
+
# Olova
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A Next.js-style React framework built on Vite with SSG, SSR, streaming, and progressive hydration.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
## Features
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
- 🚀 **File-based routing** - Next.js-style pages directory
|
|
8
|
+
- ⚡ **Vite-powered** - Lightning fast HMR and builds
|
|
9
|
+
- 📄 **SSG & SSR** - Static generation and server-side rendering
|
|
10
|
+
- 🌊 **Streaming SSR** - React 18 streaming with Suspense
|
|
11
|
+
- 💧 **Progressive Hydration** - Flight format for efficient hydration
|
|
12
|
+
- 🔗 **Link Prefetching** - Automatic route prefetching
|
|
13
|
+
- 📱 **Dynamic Routes** - `[slug]`, `[...slug]`, `[[...slug]]` patterns
|
|
14
|
+
- 🎯 **Route Groups** - `(group)` folders for organization
|
|
9
15
|
|
|
10
|
-
##
|
|
16
|
+
## Installation
|
|
11
17
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
```bash
|
|
19
|
+
npm install olova
|
|
20
|
+
# or
|
|
21
|
+
yarn add olova
|
|
22
|
+
# or
|
|
23
|
+
pnpm add olova
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Peer Dependencies
|
|
27
|
+
|
|
28
|
+
Olova requires the following peer dependencies:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install react react-dom vite
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Quick Start
|
|
35
|
+
|
|
36
|
+
### 1. Configure Vite
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
// vite.config.ts
|
|
40
|
+
import { defineConfig } from 'vite';
|
|
41
|
+
import react from '@vitejs/plugin-react';
|
|
42
|
+
import { olova } from 'olova';
|
|
43
|
+
|
|
44
|
+
export default defineConfig({
|
|
45
|
+
plugins: [react(), olova()],
|
|
46
|
+
});
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 2. Create Olova Config (Optional)
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
// olova.config.ts
|
|
53
|
+
import { defineConfig } from 'olova';
|
|
54
|
+
|
|
55
|
+
export default defineConfig({
|
|
56
|
+
// Enable SSG globally
|
|
57
|
+
ssg: {
|
|
58
|
+
enabled: true,
|
|
59
|
+
},
|
|
60
|
+
// Configure experimental features
|
|
61
|
+
experimental: {
|
|
62
|
+
prefetch: true,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 3. Create Pages
|
|
68
|
+
|
|
69
|
+
Create a `src` directory with page files:
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
src/
|
|
73
|
+
├── layout.tsx # Root layout
|
|
74
|
+
├── page.tsx # Home page (/)
|
|
75
|
+
├── about/
|
|
76
|
+
│ └── page.tsx # About page (/about)
|
|
77
|
+
└── blog/
|
|
78
|
+
├── page.tsx # Blog index (/blog)
|
|
79
|
+
└── [slug]/
|
|
80
|
+
└── page.tsx # Blog post (/blog/:slug)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 4. Create Layout
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
// src/layout.tsx
|
|
87
|
+
export default function Layout({ children }: { children: React.ReactNode }) {
|
|
88
|
+
return (
|
|
89
|
+
<html>
|
|
90
|
+
<body>{children}</body>
|
|
91
|
+
</html>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 5. Create a Page
|
|
97
|
+
|
|
98
|
+
```tsx
|
|
99
|
+
// src/page.tsx
|
|
100
|
+
import { Link } from 'olova';
|
|
101
|
+
|
|
102
|
+
export const metadata = {
|
|
103
|
+
title: 'Home',
|
|
104
|
+
description: 'Welcome to my site',
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export default function HomePage() {
|
|
108
|
+
return (
|
|
109
|
+
<div>
|
|
110
|
+
<h1>Welcome</h1>
|
|
111
|
+
<Link href="/about">About</Link>
|
|
112
|
+
</div>
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Routing
|
|
118
|
+
|
|
119
|
+
### Link Component
|
|
120
|
+
|
|
121
|
+
```tsx
|
|
122
|
+
import { Link } from 'olova';
|
|
123
|
+
|
|
124
|
+
<Link href="/about">About</Link>
|
|
125
|
+
<Link href="/blog/hello" prefetch={false}>Blog Post</Link>
|
|
126
|
+
<Link href="/dashboard" replace>Dashboard</Link>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### useRouter Hook
|
|
130
|
+
|
|
131
|
+
```tsx
|
|
132
|
+
import { useRouter } from 'olova';
|
|
133
|
+
|
|
134
|
+
function MyComponent() {
|
|
135
|
+
const router = useRouter();
|
|
136
|
+
|
|
137
|
+
const handleClick = () => {
|
|
138
|
+
router.push('/dashboard');
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
return <button onClick={handleClick}>Go to Dashboard</button>;
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### useParams Hook
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
import { useParams } from 'olova';
|
|
149
|
+
|
|
150
|
+
// In /blog/[slug]/page.tsx
|
|
151
|
+
function BlogPost() {
|
|
152
|
+
const { slug } = useParams();
|
|
153
|
+
return <h1>Post: {slug}</h1>;
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### usePathname Hook
|
|
158
|
+
|
|
159
|
+
```tsx
|
|
160
|
+
import { usePathname } from 'olova';
|
|
161
|
+
|
|
162
|
+
function Navigation() {
|
|
163
|
+
const pathname = usePathname();
|
|
164
|
+
return <nav>Current: {pathname}</nav>;
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### useSearchParams Hook
|
|
169
|
+
|
|
170
|
+
```tsx
|
|
171
|
+
import { useSearchParams } from 'olova';
|
|
172
|
+
|
|
173
|
+
function SearchPage() {
|
|
174
|
+
const searchParams = useSearchParams();
|
|
175
|
+
const query = searchParams.get('q');
|
|
176
|
+
return <div>Searching for: {query}</div>;
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Static Generation
|
|
181
|
+
|
|
182
|
+
Mark pages for static generation with the `"use static"` directive:
|
|
183
|
+
|
|
184
|
+
```tsx
|
|
185
|
+
"use static";
|
|
186
|
+
|
|
187
|
+
export default function AboutPage() {
|
|
188
|
+
return <h1>About Us</h1>;
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Or enable globally in `olova.config.ts`:
|
|
193
|
+
|
|
194
|
+
```ts
|
|
195
|
+
export default defineConfig({
|
|
196
|
+
ssg: {
|
|
197
|
+
enabled: true,
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Head Management
|
|
203
|
+
|
|
204
|
+
```tsx
|
|
205
|
+
import { Head } from 'olova';
|
|
206
|
+
|
|
207
|
+
function MyPage() {
|
|
208
|
+
return (
|
|
209
|
+
<>
|
|
210
|
+
<Head>
|
|
211
|
+
<title>My Page</title>
|
|
212
|
+
<meta name="description" content="Page description" />
|
|
213
|
+
</Head>
|
|
214
|
+
<div>Content</div>
|
|
215
|
+
</>
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Or use the `metadata` export:
|
|
221
|
+
|
|
222
|
+
```tsx
|
|
223
|
+
export const metadata = {
|
|
224
|
+
title: 'My Page',
|
|
225
|
+
description: 'Page description',
|
|
226
|
+
openGraph: {
|
|
227
|
+
title: 'My Page',
|
|
228
|
+
description: 'Page description',
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## Configuration Options
|
|
234
|
+
|
|
235
|
+
```ts
|
|
236
|
+
import { defineConfig } from 'olova';
|
|
237
|
+
|
|
238
|
+
export default defineConfig({
|
|
239
|
+
// Output directory
|
|
240
|
+
outDir: '.olova/dist',
|
|
241
|
+
|
|
242
|
+
// Base path for the app
|
|
243
|
+
basePath: '/',
|
|
244
|
+
|
|
245
|
+
// Enable trailing slashes
|
|
246
|
+
trailingSlash: false,
|
|
247
|
+
|
|
248
|
+
// SSG configuration
|
|
249
|
+
ssg: {
|
|
250
|
+
enabled: false,
|
|
251
|
+
prerender: ['/about', '/contact'],
|
|
252
|
+
},
|
|
253
|
+
|
|
254
|
+
// Experimental features
|
|
255
|
+
experimental: {
|
|
256
|
+
prefetch: true,
|
|
257
|
+
serverComponents: false,
|
|
258
|
+
},
|
|
259
|
+
|
|
260
|
+
// Static generation settings
|
|
261
|
+
staticGeneration: {
|
|
262
|
+
timeout: 30000,
|
|
263
|
+
fallback: 'blocking',
|
|
264
|
+
},
|
|
265
|
+
|
|
266
|
+
// Custom Vite config
|
|
267
|
+
vite: {
|
|
268
|
+
// Vite options
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Exports
|
|
274
|
+
|
|
275
|
+
### Main Entry (`olova`)
|
|
276
|
+
|
|
277
|
+
- `olova` - Vite plugin
|
|
278
|
+
- `defineConfig` - Configuration helper
|
|
279
|
+
- `Link` - Navigation component
|
|
280
|
+
- `Router` - Router component
|
|
281
|
+
- `useRouter` - Router hook
|
|
282
|
+
- `useParams` - Params hook
|
|
283
|
+
- `usePathname` - Pathname hook
|
|
284
|
+
- `useSearchParams` - Search params hook
|
|
285
|
+
- `navigate` - Programmatic navigation
|
|
286
|
+
- `replace` - Replace navigation
|
|
287
|
+
- `Head` - Head management component
|
|
288
|
+
- `HeadProvider` - Head context provider
|
|
289
|
+
- `usePageData` - Page data hook
|
|
290
|
+
|
|
291
|
+
### Client Entry (`olova/client`)
|
|
292
|
+
|
|
293
|
+
Client-side hydration and routing utilities.
|
|
294
|
+
|
|
295
|
+
### Server Entry (`olova/server`)
|
|
296
|
+
|
|
297
|
+
Server-side rendering and streaming utilities:
|
|
298
|
+
|
|
299
|
+
- `renderToStream` - Streaming SSR
|
|
300
|
+
- `renderToStringWithFlight` - SSG with Flight payload
|
|
301
|
+
- `generateHtmlShell` - HTML shell generation
|
|
302
|
+
- `createStreamingHeaders` - Streaming response headers
|
|
303
|
+
|
|
304
|
+
### Plugin Entry (`olova/plugin`)
|
|
305
|
+
|
|
306
|
+
Direct access to the Vite plugin.
|
|
307
|
+
|
|
308
|
+
## License
|
|
309
|
+
|
|
310
|
+
MIT
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Olova Framework - Client Entry Point
|
|
3
|
+
*/
|
|
4
|
+
export { Router, Link, useRouter, useParams, usePathname, useSearchParams, navigate, replace, } from './router';
|
|
5
|
+
export { Head, HeadProvider } from './head';
|
|
6
|
+
export { usePageData } from './data';
|
|
7
|
+
export { parseFlightPayload, getFlightData, deserializeProps, HydrationScheduler, getHydrationScheduler, } from './hydration';
|
|
8
|
+
export type { FlightPayload, HydrationState, } from './hydration';
|
|
9
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,MAAM,EACN,IAAI,EACJ,SAAS,EACT,SAAS,EACT,WAAW,EACX,eAAe,EACf,QAAQ,EACR,OAAO,GACR,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Olova Framework - Client Entry Point
|
|
3
|
+
*/
|
|
4
|
+
export { Router, Link, useRouter, useParams, usePathname, useSearchParams, navigate, replace, } from './router';
|
|
5
|
+
export { Head, HeadProvider } from './head';
|
|
6
|
+
export { usePageData } from './data';
|
|
7
|
+
export { parseFlightPayload, getFlightData, deserializeProps, HydrationScheduler, getHydrationScheduler, } from './hydration';
|
|
8
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,MAAM,EACN,IAAI,EACJ,SAAS,EACT,SAAS,EACT,WAAW,EACX,eAAe,EACf,QAAQ,EACR,OAAO,GACR,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import type { UserConfig } from 'vite';
|
|
2
|
+
/**
|
|
3
|
+
* Olova Framework Configuration Interface
|
|
4
|
+
* Similar to next.config.js options in Next.js
|
|
5
|
+
*/
|
|
6
|
+
export interface OlovaConfig {
|
|
7
|
+
/**
|
|
8
|
+
* Output directory for the built files
|
|
9
|
+
* @default '.olova/dist'
|
|
10
|
+
*/
|
|
11
|
+
outDir?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Base path for the application (like Next.js basePath)
|
|
14
|
+
* @default '/'
|
|
15
|
+
*/
|
|
16
|
+
basePath?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Enable trailing slashes on routes
|
|
19
|
+
* @default false
|
|
20
|
+
*/
|
|
21
|
+
trailingSlash?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Enable experimental features
|
|
24
|
+
*/
|
|
25
|
+
experimental?: {
|
|
26
|
+
/**
|
|
27
|
+
* Enable prefetching for Link components
|
|
28
|
+
* @default true
|
|
29
|
+
*/
|
|
30
|
+
prefetch?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Enable React Server Components (future)
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
35
|
+
serverComponents?: boolean;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Configure static generation
|
|
39
|
+
*/
|
|
40
|
+
staticGeneration?: {
|
|
41
|
+
/**
|
|
42
|
+
* Timeout for SSG rendering in milliseconds
|
|
43
|
+
* @default 30000
|
|
44
|
+
*/
|
|
45
|
+
timeout?: number;
|
|
46
|
+
/**
|
|
47
|
+
* Fallback behavior for dynamic routes
|
|
48
|
+
* @default 'blocking'
|
|
49
|
+
*/
|
|
50
|
+
fallback?: 'static' | 'blocking' | false;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* SSG (Static Site Generation) configuration
|
|
54
|
+
*/
|
|
55
|
+
ssg?: {
|
|
56
|
+
/**
|
|
57
|
+
* Enable SSG globally
|
|
58
|
+
* @default false
|
|
59
|
+
*/
|
|
60
|
+
enabled?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Routes to prerender at build time
|
|
63
|
+
*/
|
|
64
|
+
prerender?: string[];
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Flight payload configuration for hydration and streaming
|
|
68
|
+
*/
|
|
69
|
+
flight?: {
|
|
70
|
+
/**
|
|
71
|
+
* Enable streaming SSR with React 18
|
|
72
|
+
* @default true
|
|
73
|
+
*/
|
|
74
|
+
streaming?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Enable progressive hydration based on visibility
|
|
77
|
+
* @default true
|
|
78
|
+
*/
|
|
79
|
+
progressive?: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Inline critical CSS in head
|
|
82
|
+
* @default true
|
|
83
|
+
*/
|
|
84
|
+
inlineStyles?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Prefetch page data on hover
|
|
87
|
+
* @default true
|
|
88
|
+
*/
|
|
89
|
+
prefetchData?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Enable selective hydration (only hydrate interactive components)
|
|
92
|
+
* @default true
|
|
93
|
+
*/
|
|
94
|
+
selective?: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Defer below-fold content hydration
|
|
97
|
+
* @default true
|
|
98
|
+
*/
|
|
99
|
+
deferOffscreen?: boolean;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Image optimization settings
|
|
103
|
+
*/
|
|
104
|
+
images?: {
|
|
105
|
+
/**
|
|
106
|
+
* Allowed image domains
|
|
107
|
+
*/
|
|
108
|
+
domains?: string[];
|
|
109
|
+
/**
|
|
110
|
+
* Device sizes for responsive images
|
|
111
|
+
*/
|
|
112
|
+
deviceSizes?: number[];
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Environment variables to expose to the client
|
|
116
|
+
*/
|
|
117
|
+
env?: Record<string, string>;
|
|
118
|
+
/**
|
|
119
|
+
* Custom headers for routes
|
|
120
|
+
*/
|
|
121
|
+
headers?: () => Promise<Array<{
|
|
122
|
+
source: string;
|
|
123
|
+
headers: Array<{
|
|
124
|
+
key: string;
|
|
125
|
+
value: string;
|
|
126
|
+
}>;
|
|
127
|
+
}>>;
|
|
128
|
+
/**
|
|
129
|
+
* Redirects configuration
|
|
130
|
+
*/
|
|
131
|
+
redirects?: () => Promise<Array<{
|
|
132
|
+
source: string;
|
|
133
|
+
destination: string;
|
|
134
|
+
permanent: boolean;
|
|
135
|
+
}>>;
|
|
136
|
+
/**
|
|
137
|
+
* Rewrites configuration
|
|
138
|
+
*/
|
|
139
|
+
rewrites?: () => Promise<Array<{
|
|
140
|
+
source: string;
|
|
141
|
+
destination: string;
|
|
142
|
+
}>>;
|
|
143
|
+
/**
|
|
144
|
+
* Hydration and streaming configuration
|
|
145
|
+
*/
|
|
146
|
+
hydration?: {
|
|
147
|
+
/**
|
|
148
|
+
* Enable streaming SSR with React 18
|
|
149
|
+
* @default true
|
|
150
|
+
*/
|
|
151
|
+
streaming?: boolean;
|
|
152
|
+
/**
|
|
153
|
+
* Enable progressive hydration based on visibility
|
|
154
|
+
* @default true
|
|
155
|
+
*/
|
|
156
|
+
progressive?: boolean;
|
|
157
|
+
/**
|
|
158
|
+
* Defer hydration of below-fold content
|
|
159
|
+
* @default true
|
|
160
|
+
*/
|
|
161
|
+
deferOffscreen?: boolean;
|
|
162
|
+
/**
|
|
163
|
+
* Enable Flight format for efficient hydration
|
|
164
|
+
* @default true
|
|
165
|
+
*/
|
|
166
|
+
flight?: boolean;
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Custom Vite config overrides
|
|
170
|
+
*/
|
|
171
|
+
vite?: Partial<UserConfig>;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Define Olova configuration with full TypeScript support
|
|
175
|
+
* Similar to Next.js defineConfig pattern
|
|
176
|
+
*/
|
|
177
|
+
export declare function defineConfig(config?: OlovaConfig): OlovaConfig;
|
|
178
|
+
export type { OlovaConfig as Config };
|
|
179
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,YAAY,CAAC,EAAE;QACb;;;WAGG;QACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QAEnB;;;WAGG;QACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;IAEF;;OAEG;IACH,gBAAgB,CAAC,EAAE;QACjB;;;WAGG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB;;;WAGG;QACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC;KAC1C,CAAC;IAEF;;OAEG;IACH,GAAG,CAAC,EAAE;QACJ;;;WAGG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB;;WAEG;QACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IAGF;;OAEG;IACH,MAAM,CAAC,EAAE;QACP;;;WAGG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC;QAEpB;;;WAGG;QACH,WAAW,CAAC,EAAE,OAAO,CAAC;QAEtB;;;WAGG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC;QAEvB;;;WAGG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC;QAEvB;;;WAGG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC;QAEpB;;;WAGG;QACH,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,EAAE;QACP;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAEnB;;WAEG;QACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IAEF;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChD,CAAC,CAAC,CAAC;IAEJ;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC,CAAC;IAEJ;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC,CAAC;IAEJ;;OAEG;IACH,SAAS,CAAC,EAAE;QACV;;;WAGG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC;QAEpB;;;WAGG;QACH,WAAW,CAAC,EAAE,OAAO,CAAC;QAEtB;;;WAGG;QACH,cAAc,CAAC,EAAE,OAAO,CAAC;QAEzB;;;WAGG;QACH,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IAEF;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5B;AAiBD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,WAAgB,GAAG,WAAW,CAalE;AAGD,YAAY,EAAE,WAAW,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Default configuration values
|
|
2
|
+
const defaultConfig = {
|
|
3
|
+
outDir: '.olova/dist',
|
|
4
|
+
basePath: '/',
|
|
5
|
+
trailingSlash: false,
|
|
6
|
+
experimental: {
|
|
7
|
+
prefetch: true,
|
|
8
|
+
serverComponents: false,
|
|
9
|
+
},
|
|
10
|
+
staticGeneration: {
|
|
11
|
+
timeout: 30000,
|
|
12
|
+
fallback: 'blocking',
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Define Olova configuration with full TypeScript support
|
|
17
|
+
* Similar to Next.js defineConfig pattern
|
|
18
|
+
*/
|
|
19
|
+
export function defineConfig(config = {}) {
|
|
20
|
+
return {
|
|
21
|
+
...defaultConfig,
|
|
22
|
+
...config,
|
|
23
|
+
experimental: {
|
|
24
|
+
...defaultConfig.experimental,
|
|
25
|
+
...config.experimental,
|
|
26
|
+
},
|
|
27
|
+
staticGeneration: {
|
|
28
|
+
...defaultConfig.staticGeneration,
|
|
29
|
+
...config.staticGeneration,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAqMA,+BAA+B;AAC/B,MAAM,aAAa,GAA+G;IAChI,MAAM,EAAE,aAAa;IACrB,QAAQ,EAAE,GAAG;IACb,aAAa,EAAE,KAAK;IACpB,YAAY,EAAE;QACZ,QAAQ,EAAE,IAAI;QACd,gBAAgB,EAAE,KAAK;KACxB;IACD,gBAAgB,EAAE;QAChB,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,UAAU;KACrB;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,SAAsB,EAAE;IACnD,OAAO;QACL,GAAG,aAAa;QAChB,GAAG,MAAM;QACT,YAAY,EAAE;YACZ,GAAG,aAAa,CAAC,YAAY;YAC7B,GAAG,MAAM,CAAC,YAAY;SACvB;QACD,gBAAgB,EAAE;YAChB,GAAG,aAAa,CAAC,gBAAgB;YACjC,GAAG,MAAM,CAAC,gBAAgB;SAC3B;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGpD,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAwB;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
export interface Route {
|
|
3
|
+
path: string;
|
|
4
|
+
component: () => Promise<{
|
|
5
|
+
default: React.ComponentType<any>;
|
|
6
|
+
}>;
|
|
7
|
+
static: boolean;
|
|
8
|
+
dynamic?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface OlovaOptions {
|
|
11
|
+
pagesDir?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface Manifest {
|
|
14
|
+
routes: Route[];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;KAAE,CAAC,CAAC;IAChE,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/data/hooks.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAc/C"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useState, useEffect, useContext } from 'react';
|
|
2
|
+
import { PageDataContext } from './provider';
|
|
3
|
+
/**
|
|
4
|
+
* Hook to access page data (like getStaticProps props)
|
|
5
|
+
*/
|
|
6
|
+
export function usePageData() {
|
|
7
|
+
const context = useContext(PageDataContext);
|
|
8
|
+
const [data, setData] = useState(context);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
// Check for hydrated data from SSG
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
if (typeof window !== 'undefined' && window.__OLOVA_PAGE_DATA__) {
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
setData(window.__OLOVA_PAGE_DATA__);
|
|
15
|
+
}
|
|
16
|
+
}, []);
|
|
17
|
+
return data;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/data/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAW,OAAO,CAAC,CAAC;IAEpD,SAAS,CAAC,GAAG,EAAE;QACb,mCAAmC;QACnC,aAAa;QACb,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAChE,aAAa;YACb,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|