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
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Hydration scheduler - Prioritizes component hydration
3
+ */
4
+ export class HydrationScheduler {
5
+ constructor() {
6
+ this.queue = [];
7
+ this.isProcessing = false;
8
+ this.state = 'idle';
9
+ if (typeof window !== 'undefined') {
10
+ window.__FLIGHT_CHUNK__ = this.receiveChunk.bind(this);
11
+ }
12
+ }
13
+ getState() {
14
+ return this.state;
15
+ }
16
+ schedule(id, priority, task) {
17
+ const priorityValue = {
18
+ critical: 0,
19
+ high: 1,
20
+ low: 2,
21
+ idle: 3,
22
+ }[priority];
23
+ this.queue.push({ id, priority: priorityValue, task });
24
+ this.queue.sort((a, b) => a.priority - b.priority);
25
+ if (!this.isProcessing) {
26
+ this.processQueue();
27
+ }
28
+ }
29
+ async processQueue() {
30
+ this.isProcessing = true;
31
+ this.state = 'hydrating';
32
+ while (this.queue.length > 0) {
33
+ const item = this.queue.shift();
34
+ try {
35
+ if (item.priority >= 2 && 'requestIdleCallback' in window) {
36
+ await new Promise(resolve => {
37
+ window.requestIdleCallback(() => {
38
+ item.task();
39
+ resolve();
40
+ });
41
+ });
42
+ }
43
+ else {
44
+ await Promise.resolve().then(item.task);
45
+ }
46
+ }
47
+ catch (error) {
48
+ console.error(`[Olova] Hydration failed for ${item.id}:`, error);
49
+ }
50
+ await new Promise(r => setTimeout(r, 0));
51
+ }
52
+ this.isProcessing = false;
53
+ this.state = 'complete';
54
+ if (typeof window !== 'undefined') {
55
+ window.dispatchEvent(new CustomEvent('olova:hydration-complete'));
56
+ }
57
+ }
58
+ receiveChunk(chunk) {
59
+ this.state = 'streaming';
60
+ const placeholder = document.querySelector(`[data-flight-id="${chunk.id}"]`);
61
+ if (placeholder) {
62
+ const temp = document.createElement('div');
63
+ temp.innerHTML = chunk.html;
64
+ while (temp.firstChild) {
65
+ placeholder.parentNode?.insertBefore(temp.firstChild, placeholder);
66
+ }
67
+ placeholder.remove();
68
+ if (chunk.data) {
69
+ this.schedule(chunk.id, 'high', () => {
70
+ this.hydrateNode(chunk.id, chunk.data);
71
+ });
72
+ }
73
+ }
74
+ }
75
+ hydrateNode(id, data) {
76
+ const element = document.querySelector(`[data-flight-id="${id}"]`);
77
+ if (element) {
78
+ element.setAttribute('data-hydrated', 'true');
79
+ element.__FLIGHT_DATA__ = data;
80
+ }
81
+ }
82
+ }
83
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/hydration/scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { FlightPayload } from './types';
2
+ /**
3
+ * Generate SEO meta tags HTML from Flight payload
4
+ */
5
+ export declare function generateSEOTags(payload: FlightPayload): string;
6
+ /**
7
+ * Generate resource hint tags
8
+ */
9
+ export declare function generateResourceHintTags(payload: FlightPayload): string;
10
+ //# sourceMappingURL=seo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/hydration/seo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAsE9D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAcvE"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Generate SEO meta tags HTML from Flight payload
3
+ */
4
+ export function generateSEOTags(payload) {
5
+ const { meta, seo } = payload;
6
+ let tags = '';
7
+ // Basic meta tags
8
+ if (meta?.title) {
9
+ tags += `<title>${escapeHtmlAttr(meta.title)}</title>\n`;
10
+ }
11
+ if (meta?.description) {
12
+ tags += `<meta name="description" content="${escapeHtmlAttr(meta.description)}" />\n`;
13
+ }
14
+ // Enhanced SEO tags
15
+ if (seo) {
16
+ // Canonical
17
+ if (seo.canonical) {
18
+ tags += `<link rel="canonical" href="${escapeHtmlAttr(seo.canonical)}" />\n`;
19
+ }
20
+ // Robots
21
+ if (seo.robots) {
22
+ tags += `<meta name="robots" content="${escapeHtmlAttr(seo.robots)}" />\n`;
23
+ }
24
+ // Open Graph
25
+ if (seo.openGraph) {
26
+ const og = seo.openGraph;
27
+ if (og.title)
28
+ tags += `<meta property="og:title" content="${escapeHtmlAttr(og.title)}" />\n`;
29
+ if (og.description)
30
+ tags += `<meta property="og:description" content="${escapeHtmlAttr(og.description)}" />\n`;
31
+ if (og.type)
32
+ tags += `<meta property="og:type" content="${escapeHtmlAttr(og.type)}" />\n`;
33
+ if (og.url)
34
+ tags += `<meta property="og:url" content="${escapeHtmlAttr(og.url)}" />\n`;
35
+ if (og.image)
36
+ tags += `<meta property="og:image" content="${escapeHtmlAttr(og.image)}" />\n`;
37
+ if (og.siteName)
38
+ tags += `<meta property="og:site_name" content="${escapeHtmlAttr(og.siteName)}" />\n`;
39
+ }
40
+ // Twitter Card
41
+ if (seo.twitter) {
42
+ const tw = seo.twitter;
43
+ if (tw.card)
44
+ tags += `<meta name="twitter:card" content="${escapeHtmlAttr(tw.card)}" />\n`;
45
+ if (tw.site)
46
+ tags += `<meta name="twitter:site" content="${escapeHtmlAttr(tw.site)}" />\n`;
47
+ if (tw.creator)
48
+ tags += `<meta name="twitter:creator" content="${escapeHtmlAttr(tw.creator)}" />\n`;
49
+ if (tw.title)
50
+ tags += `<meta name="twitter:title" content="${escapeHtmlAttr(tw.title)}" />\n`;
51
+ if (tw.description)
52
+ tags += `<meta name="twitter:description" content="${escapeHtmlAttr(tw.description)}" />\n`;
53
+ if (tw.image)
54
+ tags += `<meta name="twitter:image" content="${escapeHtmlAttr(tw.image)}" />\n`;
55
+ }
56
+ // Alternate languages
57
+ if (seo.alternates) {
58
+ for (const alt of seo.alternates) {
59
+ tags += `<link rel="alternate" hreflang="${alt.hreflang}" href="${escapeHtmlAttr(alt.href)}" />\n`;
60
+ }
61
+ }
62
+ // Preconnect hints
63
+ if (seo.preconnect) {
64
+ for (const domain of seo.preconnect) {
65
+ tags += `<link rel="preconnect" href="${escapeHtmlAttr(domain)}" />\n`;
66
+ }
67
+ }
68
+ // JSON-LD structured data
69
+ if (seo.jsonLd) {
70
+ const jsonLdArray = Array.isArray(seo.jsonLd) ? seo.jsonLd : [seo.jsonLd];
71
+ for (const schema of jsonLdArray) {
72
+ tags += `<script type="application/ld+json">${JSON.stringify(schema)}</script>\n`;
73
+ }
74
+ }
75
+ }
76
+ return tags;
77
+ }
78
+ /**
79
+ * Generate resource hint tags
80
+ */
81
+ export function generateResourceHintTags(payload) {
82
+ if (!payload.resourceHints?.length)
83
+ return '';
84
+ let tags = '';
85
+ for (const hint of payload.resourceHints) {
86
+ let tag = `<link rel="${hint.rel}" href="${escapeHtmlAttr(hint.href)}"`;
87
+ if (hint.as)
88
+ tag += ` as="${hint.as}"`;
89
+ if (hint.type)
90
+ tag += ` type="${hint.type}"`;
91
+ if (hint.crossorigin)
92
+ tag += ` crossorigin="${hint.crossorigin}"`;
93
+ if (hint.fetchpriority)
94
+ tag += ` fetchpriority="${hint.fetchpriority}"`;
95
+ tag += ' />\n';
96
+ tags += tag;
97
+ }
98
+ return tags;
99
+ }
100
+ /**
101
+ * Escape HTML attribute value
102
+ */
103
+ function escapeHtmlAttr(str) {
104
+ return str
105
+ .replace(/&/g, '&amp;')
106
+ .replace(/"/g, '&quot;')
107
+ .replace(/</g, '&lt;')
108
+ .replace(/>/g, '&gt;');
109
+ }
110
+ //# sourceMappingURL=seo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo.js","sourceRoot":"","sources":["../../src/hydration/seo.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAsB;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAC9B,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,kBAAkB;IAClB,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;QAChB,IAAI,IAAI,UAAU,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;IAC3D,CAAC;IACD,IAAI,IAAI,EAAE,WAAW,EAAE,CAAC;QACtB,IAAI,IAAI,qCAAqC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IACxF,CAAC;IAED,oBAAoB;IACpB,IAAI,GAAG,EAAE,CAAC;QACR,YAAY;QACZ,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,IAAI,+BAA+B,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC/E,CAAC;QAED,SAAS;QACT,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,IAAI,gCAAgC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC7E,CAAC;QAED,aAAa;QACb,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC;YACzB,IAAI,EAAE,CAAC,KAAK;gBAAE,IAAI,IAAI,sCAAsC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC7F,IAAI,EAAE,CAAC,WAAW;gBAAE,IAAI,IAAI,4CAA4C,cAAc,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;YAC/G,IAAI,EAAE,CAAC,IAAI;gBAAE,IAAI,IAAI,qCAAqC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC1F,IAAI,EAAE,CAAC,GAAG;gBAAE,IAAI,IAAI,oCAAoC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;YACvF,IAAI,EAAE,CAAC,KAAK;gBAAE,IAAI,IAAI,sCAAsC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC7F,IAAI,EAAE,CAAC,QAAQ;gBAAE,IAAI,IAAI,0CAA0C,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzG,CAAC;QAED,eAAe;QACf,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;YACvB,IAAI,EAAE,CAAC,IAAI;gBAAE,IAAI,IAAI,sCAAsC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC3F,IAAI,EAAE,CAAC,IAAI;gBAAE,IAAI,IAAI,sCAAsC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC3F,IAAI,EAAE,CAAC,OAAO;gBAAE,IAAI,IAAI,yCAAyC,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;YACpG,IAAI,EAAE,CAAC,KAAK;gBAAE,IAAI,IAAI,uCAAuC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC9F,IAAI,EAAE,CAAC,WAAW;gBAAE,IAAI,IAAI,6CAA6C,cAAc,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;YAChH,IAAI,EAAE,CAAC,KAAK;gBAAE,IAAI,IAAI,uCAAuC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChG,CAAC;QAED,sBAAsB;QACtB,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACjC,IAAI,IAAI,mCAAmC,GAAG,CAAC,QAAQ,WAAW,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrG,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACpC,IAAI,IAAI,gCAAgC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC;YACzE,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1E,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;gBACjC,IAAI,IAAI,sCAAsC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAsB;IAC7D,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM;QAAE,OAAO,EAAE,CAAC;IAE9C,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QACzC,IAAI,GAAG,GAAG,cAAc,IAAI,CAAC,GAAG,WAAW,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACxE,IAAI,IAAI,CAAC,EAAE;YAAE,GAAG,IAAI,QAAQ,IAAI,CAAC,EAAE,GAAG,CAAC;QACvC,IAAI,IAAI,CAAC,IAAI;YAAE,GAAG,IAAI,UAAU,IAAI,CAAC,IAAI,GAAG,CAAC;QAC7C,IAAI,IAAI,CAAC,WAAW;YAAE,GAAG,IAAI,iBAAiB,IAAI,CAAC,WAAW,GAAG,CAAC;QAClE,IAAI,IAAI,CAAC,aAAa;YAAE,GAAG,IAAI,mBAAmB,IAAI,CAAC,aAAa,GAAG,CAAC;QACxE,GAAG,IAAI,OAAO,CAAC;QACf,IAAI,IAAI,GAAG,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { FlightPayload, FlightChunk } from './types';
2
+ /**
3
+ * Serialize props for transfer (remove functions, handle special types)
4
+ */
5
+ export declare function serializeProps(props: Record<string, any>): Record<string, any>;
6
+ /**
7
+ * Deserialize props from Flight format
8
+ */
9
+ export declare function deserializeProps(props: Record<string, any>): Record<string, any>;
10
+ /**
11
+ * Serialize Flight payload to string
12
+ */
13
+ export declare function serializeFlightPayload(payload: FlightPayload): string;
14
+ /**
15
+ * Generate script tag for embedding Flight payload
16
+ */
17
+ export declare function generateFlightScript(payload: FlightPayload): string;
18
+ /**
19
+ * Generate streaming chunk script
20
+ */
21
+ export declare function generateChunkScript(chunk: FlightChunk): string;
22
+ /**
23
+ * Parse Flight payload from window
24
+ */
25
+ export declare function parseFlightPayload(): FlightPayload | null;
26
+ /**
27
+ * Get component data from Flight payload
28
+ */
29
+ export declare function getFlightData<T = any>(key: string): T | null;
30
+ //# sourceMappingURL=serialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../src/hydration/serialization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1D;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAqB9E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAoBhF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAQnE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAM9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,GAAG,IAAI,CAIzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAI5D"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Serialize props for transfer (remove functions, handle special types)
3
+ */
4
+ export function serializeProps(props) {
5
+ const serialized = {};
6
+ for (const [key, value] of Object.entries(props)) {
7
+ if (key === 'children')
8
+ continue;
9
+ if (typeof value === 'function')
10
+ continue;
11
+ if (value instanceof Date) {
12
+ serialized[key] = { __type: 'Date', value: value.toISOString() };
13
+ }
14
+ else if (value instanceof Map) {
15
+ serialized[key] = { __type: 'Map', value: Array.from(value.entries()) };
16
+ }
17
+ else if (value instanceof Set) {
18
+ serialized[key] = { __type: 'Set', value: Array.from(value) };
19
+ }
20
+ else if (typeof value === 'object' && value !== null) {
21
+ serialized[key] = serializeProps(value);
22
+ }
23
+ else {
24
+ serialized[key] = value;
25
+ }
26
+ }
27
+ return serialized;
28
+ }
29
+ /**
30
+ * Deserialize props from Flight format
31
+ */
32
+ export function deserializeProps(props) {
33
+ const result = {};
34
+ for (const [key, value] of Object.entries(props)) {
35
+ if (value && typeof value === 'object') {
36
+ if (value.__type === 'Date') {
37
+ result[key] = new Date(value.value);
38
+ }
39
+ else if (value.__type === 'Map') {
40
+ result[key] = new Map(value.value);
41
+ }
42
+ else if (value.__type === 'Set') {
43
+ result[key] = new Set(value.value);
44
+ }
45
+ else {
46
+ result[key] = deserializeProps(value);
47
+ }
48
+ }
49
+ else {
50
+ result[key] = value;
51
+ }
52
+ }
53
+ return result;
54
+ }
55
+ /**
56
+ * Serialize Flight payload to string
57
+ */
58
+ export function serializeFlightPayload(payload) {
59
+ return JSON.stringify(payload);
60
+ }
61
+ /**
62
+ * Generate script tag for embedding Flight payload
63
+ */
64
+ export function generateFlightScript(payload) {
65
+ const serialized = serializeFlightPayload(payload);
66
+ const escaped = serialized
67
+ .replace(/</g, '\\u003c')
68
+ .replace(/>/g, '\\u003e')
69
+ .replace(/&/g, '\\u0026');
70
+ return `<script>self.__FLIGHT__=${escaped}</script>`;
71
+ }
72
+ /**
73
+ * Generate streaming chunk script
74
+ */
75
+ export function generateChunkScript(chunk) {
76
+ const serialized = JSON.stringify(chunk)
77
+ .replace(/</g, '\\u003c')
78
+ .replace(/>/g, '\\u003e');
79
+ return `<script>self.__FLIGHT_CHUNK__(${serialized})</script>`;
80
+ }
81
+ /**
82
+ * Parse Flight payload from window
83
+ */
84
+ export function parseFlightPayload() {
85
+ if (typeof window === 'undefined')
86
+ return null;
87
+ const flight = window.__FLIGHT__;
88
+ return flight || null;
89
+ }
90
+ /**
91
+ * Get component data from Flight payload
92
+ */
93
+ export function getFlightData(key) {
94
+ const payload = parseFlightPayload();
95
+ if (!payload)
96
+ return null;
97
+ return payload.data[key] ?? null;
98
+ }
99
+ //# sourceMappingURL=serialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../src/hydration/serialization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Flight Payload - The wire format for transferring component trees
3
+ */
4
+ export interface FlightPayload {
5
+ v: number;
6
+ ts: number;
7
+ route: string;
8
+ tree: FlightNode[];
9
+ data: Record<string, any>;
10
+ chunks: FlightChunk[];
11
+ hints: HydrationHint[];
12
+ styles: string[];
13
+ meta?: FlightMeta;
14
+ seo?: FlightSEO;
15
+ islands?: HydrationIsland[];
16
+ criticalCss?: string;
17
+ resourceHints?: ResourceHint[];
18
+ build?: {
19
+ id: string;
20
+ time: number;
21
+ };
22
+ }
23
+ export interface FlightNode {
24
+ id: string;
25
+ type: string | number;
26
+ props: Record<string, any>;
27
+ children: string[];
28
+ hydrate: boolean;
29
+ suspense?: boolean;
30
+ error?: boolean;
31
+ }
32
+ export interface FlightChunk {
33
+ id: string;
34
+ html: string;
35
+ ready: boolean;
36
+ data?: any;
37
+ order: number;
38
+ }
39
+ export interface HydrationHint {
40
+ id: string;
41
+ priority: 'critical' | 'high' | 'low' | 'idle';
42
+ interactive: boolean;
43
+ aboveFold: boolean;
44
+ defer?: 'hover' | 'visible' | 'idle' | 'interaction';
45
+ }
46
+ export interface FlightMeta {
47
+ title?: string;
48
+ description?: string;
49
+ image?: string;
50
+ url?: string;
51
+ type?: string;
52
+ }
53
+ export interface FlightSEO {
54
+ jsonLd?: object | object[];
55
+ openGraph?: {
56
+ title?: string;
57
+ description?: string;
58
+ type?: string;
59
+ url?: string;
60
+ image?: string;
61
+ siteName?: string;
62
+ };
63
+ twitter?: {
64
+ card?: 'summary' | 'summary_large_image' | 'app' | 'player';
65
+ site?: string;
66
+ creator?: string;
67
+ title?: string;
68
+ description?: string;
69
+ image?: string;
70
+ };
71
+ canonical?: string;
72
+ robots?: string;
73
+ alternates?: Array<{
74
+ hreflang: string;
75
+ href: string;
76
+ }>;
77
+ preconnect?: string[];
78
+ }
79
+ export interface HydrationIsland {
80
+ id: string;
81
+ component: string;
82
+ trigger: 'load' | 'visible' | 'idle' | 'interaction' | 'media';
83
+ priority: number;
84
+ aboveFold?: boolean;
85
+ selector?: string;
86
+ props?: Record<string, any>;
87
+ mediaQuery?: string;
88
+ }
89
+ export interface ResourceHint {
90
+ href: string;
91
+ rel: 'preload' | 'prefetch' | 'preconnect' | 'dns-prefetch' | 'modulepreload';
92
+ as?: 'script' | 'style' | 'font' | 'image' | 'fetch' | 'document';
93
+ type?: string;
94
+ crossorigin?: 'anonymous' | 'use-credentials';
95
+ fetchpriority?: 'high' | 'low' | 'auto';
96
+ }
97
+ export type HydrationState = 'idle' | 'parsing' | 'scheduling' | 'hydrating' | 'streaming' | 'complete' | 'error';
98
+ export interface FlightContext {
99
+ payload: FlightPayload;
100
+ scheduler: any;
101
+ isStreaming: boolean;
102
+ onChunk?: (chunk: FlightChunk) => void;
103
+ }
104
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hydration/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hydration/types.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -1,86 +1,17 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React, { ReactNode } from 'react';
3
-
4
- declare function useParams(): Record<string, string>;
5
1
  /**
6
- * Returns the current pathname (without query string or hash)
7
- * Similar to Next.js usePathname hook
2
+ * Olova Framework - Main Entry Point
8
3
  */
9
- declare function usePathname(): string;
10
- /**
11
- * A read-only interface for URLSearchParams
12
- * Similar to Next.js useSearchParams hook
13
- */
14
- interface ReadonlyURLSearchParams {
15
- get(name: string): string | null;
16
- getAll(name: string): string[];
17
- has(name: string): boolean;
18
- keys(): IterableIterator<string>;
19
- values(): IterableIterator<string>;
20
- entries(): IterableIterator<[string, string]>;
21
- forEach(callback: (value: string, key: string, parent: URLSearchParams) => void): void;
22
- toString(): string;
23
- size: number;
24
- }
25
- /**
26
- * Returns the current URL search parameters
27
- * Similar to Next.js useSearchParams hook
28
- *
29
- * Example usage:
30
- * const searchParams = useSearchParams();
31
- * const query = searchParams.get('q'); // ?q=hello -> 'hello'
32
- * const tags = searchParams.getAll('tag'); // ?tag=a&tag=b -> ['a', 'b']
33
- */
34
- declare function useSearchParams(): ReadonlyURLSearchParams;
35
- declare function matchRoute(path: string): {
36
- loader: any;
37
- params: Record<string, string>;
38
- pattern: string;
39
- } | null;
40
- interface Metadata {
41
- title?: string;
42
- description?: string;
43
- keywords?: string | string[];
44
- openGraph?: {
45
- title?: string;
46
- description?: string;
47
- url?: string;
48
- siteName?: string;
49
- images?: {
50
- url: string;
51
- width?: number;
52
- height?: number;
53
- alt?: string;
54
- }[];
55
- type?: string;
56
- };
57
- twitter?: {
58
- card?: 'summary' | 'summary_large_image' | 'app' | 'player';
59
- site?: string;
60
- creator?: string;
61
- title?: string;
62
- description?: string;
63
- images?: string[];
64
- };
65
- robots?: string;
66
- canonical?: string;
67
- jsonLd?: object | object[];
68
- }
69
- declare function loadRoute(path: string): Promise<{
70
- module: any;
71
- params: Record<string, string>;
72
- metadata: Metadata | undefined;
73
- } | null>;
74
- interface RouterProps {
75
- url?: string;
76
- initialComponent?: React.ComponentType;
77
- initialParams?: Record<string, string>;
78
- onRouteChange?: (metadata: Metadata | undefined) => void;
79
- }
80
- declare function Router({ url, initialComponent, initialParams, onRouteChange }: RouterProps): react_jsx_runtime.JSX.Element | null;
81
- declare function Link({ href, children, ...props }: {
82
- href: string;
83
- children: ReactNode;
84
- } & React.AnchorHTMLAttributes<HTMLAnchorElement>): React.ReactElement;
85
-
86
- export { Link as L, type Metadata, Router as R, usePathname as a, useSearchParams as b, loadRoute as l, matchRoute as m, useParams as u };
4
+ export { defineConfig } from './core';
5
+ export type { OlovaConfig, Config, Route, OlovaOptions, Manifest } from './core';
6
+ export { olova as default, olova } from './plugin';
7
+ export { Link, Router, useRouter, useParams, usePathname, useSearchParams, navigate, replace, redirect, permanentRedirect, notFound } from './router';
8
+ export type { RouterProps, NavigateOptions, RouterContextType, LinkProps } from './router';
9
+ export { Head, HeadProvider, renderHeadToString } from './head';
10
+ export type { HeadState, MetaProps, HeadLinkProps, TitleProps } from './head';
11
+ export { usePageData, PageDataProvider, extractGetStaticProps, serializePageData } from './data';
12
+ export type { GetStaticProps, GetStaticPropsContext, GetStaticPropsResult } from './data';
13
+ export { createFlightPayload, addFlightNode, addFlightData, addFlightChunk, addHydrationHint, generateFlightScript, parseFlightPayload, getFlightData, deserializeProps, HydrationScheduler, getHydrationScheduler, } from './hydration';
14
+ export type { FlightPayload, FlightNode, FlightChunk, HydrationHint, HydrationState, } from './hydration';
15
+ export { renderToStream, renderToStringWithFlight, generateHtmlShell, generateCompleteHtml, createFlightInjector, createSuspensePlaceholder, createSuspenseResolved, createStreamingHeaders, isStreaming, } from './streaming';
16
+ export type { StreamingOptions, StreamingResult, HtmlShellOptions, } from './streaming';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGjF,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGnD,OAAO,EACL,IAAI,EACJ,MAAM,EACN,SAAS,EACT,SAAS,EACT,WAAW,EACX,eAAe,EACf,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,QAAQ,EACT,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,SAAS,EACV,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAChE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAG9E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AACjG,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAG1F,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1 +1,18 @@
1
+ /**
2
+ * Olova Framework - Main Entry Point
3
+ */
4
+ // Core
5
+ export { defineConfig } from './core';
6
+ // Plugin
7
+ export { olova as default, olova } from './plugin';
8
+ // Router
9
+ export { Link, Router, useRouter, useParams, usePathname, useSearchParams, navigate, replace, redirect, permanentRedirect, notFound } from './router';
10
+ // Head/SEO
11
+ export { Head, HeadProvider, renderHeadToString } from './head';
12
+ // Data
13
+ export { usePageData, PageDataProvider, extractGetStaticProps, serializePageData } from './data';
14
+ // Hydration
15
+ export { createFlightPayload, addFlightNode, addFlightData, addFlightChunk, addHydrationHint, generateFlightScript, parseFlightPayload, getFlightData, deserializeProps, HydrationScheduler, getHydrationScheduler, } from './hydration';
16
+ // Streaming
17
+ export { renderToStream, renderToStringWithFlight, generateHtmlShell, generateCompleteHtml, createFlightInjector, createSuspensePlaceholder, createSuspenseResolved, createStreamingHeaders, isStreaming, } from './streaming';
1
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO;AACP,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,SAAS;AACT,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEnD,SAAS;AACT,OAAO,EACL,IAAI,EACJ,MAAM,EACN,SAAS,EACT,SAAS,EACT,WAAW,EACX,eAAe,EACf,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,QAAQ,EACT,MAAM,UAAU,CAAC;AAQlB,WAAW;AACX,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAGhE,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAGjG,YAAY;AACZ,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AASrB,YAAY;AACZ,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,WAAW,GACZ,MAAM,aAAa,CAAC"}