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.
Files changed (156) hide show
  1. package/README.md +305 -12
  2. package/dist/client.d.ts +9 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +8 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/core/config.d.ts +179 -0
  7. package/dist/core/config.d.ts.map +1 -0
  8. package/dist/core/config.js +33 -0
  9. package/dist/core/config.js.map +1 -0
  10. package/dist/core/index.d.ts +8 -0
  11. package/dist/core/index.d.ts.map +1 -0
  12. package/dist/core/index.js +7 -0
  13. package/dist/core/index.js.map +1 -0
  14. package/dist/core/types.d.ts +16 -0
  15. package/dist/core/types.d.ts.map +1 -0
  16. package/dist/core/types.js +2 -0
  17. package/dist/core/types.js.map +1 -0
  18. package/dist/data/hooks.d.ts +5 -0
  19. package/dist/data/hooks.d.ts.map +1 -0
  20. package/dist/data/hooks.js +19 -0
  21. package/dist/data/hooks.js.map +1 -0
  22. package/dist/data/index.d.ts +9 -0
  23. package/dist/data/index.d.ts.map +1 -0
  24. package/dist/data/index.js +9 -0
  25. package/dist/data/index.js.map +1 -0
  26. package/dist/data/provider.d.ts +10 -0
  27. package/dist/data/provider.d.ts.map +1 -0
  28. package/dist/data/provider.js +10 -0
  29. package/dist/data/provider.js.map +1 -0
  30. package/dist/data/serialize.d.ts +10 -0
  31. package/dist/data/serialize.d.ts.map +1 -0
  32. package/dist/data/serialize.js +16 -0
  33. package/dist/data/serialize.js.map +1 -0
  34. package/dist/data/types.d.ts +9 -0
  35. package/dist/data/types.d.ts.map +1 -0
  36. package/dist/data/types.js +2 -0
  37. package/dist/data/types.js.map +1 -0
  38. package/dist/head/Head.d.ts +8 -0
  39. package/dist/head/Head.d.ts.map +1 -0
  40. package/dist/head/Head.js +56 -0
  41. package/dist/head/Head.js.map +1 -0
  42. package/dist/head/HeadProvider.d.ts +31 -0
  43. package/dist/head/HeadProvider.d.ts.map +1 -0
  44. package/dist/head/HeadProvider.js +17 -0
  45. package/dist/head/HeadProvider.js.map +1 -0
  46. package/dist/head/index.d.ts +8 -0
  47. package/dist/head/index.d.ts.map +1 -0
  48. package/dist/head/index.js +8 -0
  49. package/dist/head/index.js.map +1 -0
  50. package/dist/head/ssr.d.ts +9 -0
  51. package/dist/head/ssr.d.ts.map +1 -0
  52. package/dist/head/ssr.js +35 -0
  53. package/dist/head/ssr.js.map +1 -0
  54. package/dist/hydration/context.d.ts +14 -0
  55. package/dist/hydration/context.d.ts.map +1 -0
  56. package/dist/hydration/context.js +20 -0
  57. package/dist/hydration/context.js.map +1 -0
  58. package/dist/hydration/index.d.ts +15 -0
  59. package/dist/hydration/index.d.ts.map +1 -0
  60. package/dist/hydration/index.js +25 -0
  61. package/dist/hydration/index.js.map +1 -0
  62. package/dist/hydration/payload.d.ts +46 -0
  63. package/dist/hydration/payload.d.ts.map +1 -0
  64. package/dist/hydration/payload.js +99 -0
  65. package/dist/hydration/payload.js.map +1 -0
  66. package/dist/hydration/scheduler.d.ts +16 -0
  67. package/dist/hydration/scheduler.d.ts.map +1 -0
  68. package/dist/hydration/scheduler.js +83 -0
  69. package/dist/hydration/scheduler.js.map +1 -0
  70. package/dist/hydration/seo.d.ts +10 -0
  71. package/dist/hydration/seo.d.ts.map +1 -0
  72. package/dist/hydration/seo.js +110 -0
  73. package/dist/hydration/seo.js.map +1 -0
  74. package/dist/hydration/serialization.d.ts +30 -0
  75. package/dist/hydration/serialization.d.ts.map +1 -0
  76. package/dist/hydration/serialization.js +99 -0
  77. package/dist/hydration/serialization.js.map +1 -0
  78. package/dist/hydration/types.d.ts +104 -0
  79. package/dist/hydration/types.d.ts.map +1 -0
  80. package/dist/hydration/types.js +2 -0
  81. package/dist/hydration/types.js.map +1 -0
  82. package/dist/index.d.ts +15 -84
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +17 -0
  85. package/dist/index.js.map +1 -1
  86. package/dist/plugin/cache.d.ts +66 -0
  87. package/dist/plugin/cache.d.ts.map +1 -0
  88. package/dist/plugin/cache.js +129 -0
  89. package/dist/plugin/cache.js.map +1 -0
  90. package/dist/plugin/index.d.ts +8 -0
  91. package/dist/plugin/index.d.ts.map +1 -0
  92. package/dist/plugin/index.js +8 -0
  93. package/dist/plugin/index.js.map +1 -0
  94. package/dist/plugin/plugin.d.ts +25 -0
  95. package/dist/plugin/plugin.d.ts.map +1 -0
  96. package/dist/plugin/plugin.js +601 -0
  97. package/dist/plugin/plugin.js.map +1 -0
  98. package/dist/router/Link.d.ts +7 -0
  99. package/dist/router/Link.d.ts.map +1 -0
  100. package/dist/router/Link.js +53 -0
  101. package/dist/router/Link.js.map +1 -0
  102. package/dist/router/Router.d.ts +7 -0
  103. package/dist/router/Router.d.ts.map +1 -0
  104. package/dist/router/Router.js +263 -0
  105. package/dist/router/Router.js.map +1 -0
  106. package/dist/router/context.d.ts +13 -0
  107. package/dist/router/context.d.ts.map +1 -0
  108. package/dist/router/context.js +47 -0
  109. package/dist/router/context.js.map +1 -0
  110. package/dist/router/hooks.d.ts +30 -0
  111. package/dist/router/hooks.d.ts.map +1 -0
  112. package/dist/router/hooks.js +59 -0
  113. package/dist/router/hooks.js.map +1 -0
  114. package/dist/router/index.d.ts +13 -0
  115. package/dist/router/index.d.ts.map +1 -0
  116. package/dist/router/index.js +14 -0
  117. package/dist/router/index.js.map +1 -0
  118. package/dist/router/matching.d.ts +19 -0
  119. package/dist/router/matching.d.ts.map +1 -0
  120. package/dist/router/matching.js +115 -0
  121. package/dist/router/matching.js.map +1 -0
  122. package/dist/router/navigation.d.ts +26 -0
  123. package/dist/router/navigation.d.ts.map +1 -0
  124. package/dist/router/navigation.js +65 -0
  125. package/dist/router/navigation.js.map +1 -0
  126. package/dist/router/types.d.ts +61 -0
  127. package/dist/router/types.d.ts.map +1 -0
  128. package/dist/router/types.js +6 -0
  129. package/dist/router/types.js.map +1 -0
  130. package/dist/server.d.ts +10 -16
  131. package/dist/server.d.ts.map +1 -0
  132. package/dist/server.js +7 -19
  133. package/dist/server.js.map +1 -1
  134. package/dist/streaming/html.d.ts +29 -0
  135. package/dist/streaming/html.d.ts.map +1 -0
  136. package/dist/streaming/html.js +72 -0
  137. package/dist/streaming/html.js.map +1 -0
  138. package/dist/streaming/index.d.ts +7 -0
  139. package/dist/streaming/index.d.ts.map +1 -0
  140. package/dist/streaming/index.js +7 -0
  141. package/dist/streaming/index.js.map +1 -0
  142. package/dist/streaming/render.d.ts +32 -0
  143. package/dist/streaming/render.d.ts.map +1 -0
  144. package/dist/streaming/render.js +83 -0
  145. package/dist/streaming/render.js.map +1 -0
  146. package/dist/streaming/utils.d.ts +30 -0
  147. package/dist/streaming/utils.d.ts.map +1 -0
  148. package/dist/streaming/utils.js +61 -0
  149. package/dist/streaming/utils.js.map +1 -0
  150. package/package.json +43 -35
  151. package/dist/router.d.ts +0 -3
  152. package/dist/router.js +0 -229
  153. package/dist/router.js.map +0 -1
  154. package/dist/vite.d.ts +0 -98
  155. package/dist/vite.js +0 -1828
  156. package/dist/vite.js.map +0 -1
package/README.md CHANGED
@@ -1,17 +1,310 @@
1
- # Olova — Client-First, Ultra-Fast React Framework
1
+ # Olova
2
2
 
3
- **Olova** is a client-first, ultra-fast React framework built on top of [Vite](https://vitejs.dev/). It combines the performance of a lightweight client-side library with the powerful features of a modern framework: file-system routing, automatic SSG, and built-in SEO.
3
+ A Next.js-style React framework built on Vite with SSG, SSR, streaming, and progressive hydration.
4
4
 
5
- [![npm version](https://img.shields.io/npm/v/olova.svg)](https://www.npmjs.com/package/olova)
6
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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
- ## 🚀 Key Features
16
+ ## Installation
11
17
 
12
- - 📂 **File-System Routing**: Automatically generates routes based on your `src` directory structure.
13
- - **Lightning Fast**: Powered by Vite for near-instant HMR (Hot Module Replacement) and optimized builds.
14
- - 🌍 **SEO & Metadata**: Built-in support for dynamic metadata, titles, and descriptions at the page and layout level.
15
- - 🏗️ **Static Site Generation (SSG)**: Pre-render your application into static HTML for maximum performance and SEO.
16
- - 🎨 **Layout System**: Easy-to-use nested layouts to share UI across routes (like `root.tsx`).
17
- - 🛠️ **Developer Experience**: Simple setup, TypeScript-first, and zero-effort configuration.
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
@@ -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,8 @@
1
+ /**
2
+ * Olova Core Module
3
+ * Configuration and shared types
4
+ */
5
+ export { defineConfig } from './config';
6
+ export type { OlovaConfig, Config } from './config';
7
+ export type { Route, OlovaOptions, Manifest } from './types';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ /**
2
+ * Olova Core Module
3
+ * Configuration and shared types
4
+ */
5
+ // Configuration exports
6
+ export { defineConfig } from './config';
7
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Hook to access page data (like getStaticProps props)
3
+ */
4
+ export declare function usePageData<T = any>(): T | null;
5
+ //# sourceMappingURL=hooks.d.ts.map
@@ -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,9 @@
1
+ /**
2
+ * Olova Data Module
3
+ * Data fetching and hydration utilities
4
+ */
5
+ export * from './types';
6
+ export * from './provider';
7
+ export * from './hooks';
8
+ export * from './serialize';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Olova Data Module
3
+ * Data fetching and hydration utilities
4
+ */
5
+ export * from './types';
6
+ export * from './provider';
7
+ export * from './hooks';
8
+ export * from './serialize';
9
+ //# sourceMappingURL=index.js.map