@emberkit/core 0.2.0 → 0.2.3

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 (149) hide show
  1. package/LICENSE +199 -0
  2. package/dist/boundaries/error-boundary.d.ts +29 -0
  3. package/dist/boundaries/error-boundary.d.ts.map +1 -0
  4. package/dist/boundaries/errors.d.ts +39 -0
  5. package/dist/boundaries/errors.d.ts.map +1 -0
  6. package/dist/boundaries/index.d.ts +5 -0
  7. package/dist/boundaries/index.d.ts.map +1 -0
  8. package/dist/boundaries/loading-boundary.d.ts +42 -0
  9. package/dist/boundaries/loading-boundary.d.ts.map +1 -0
  10. package/dist/cache/index.d.ts +60 -0
  11. package/dist/cache/index.d.ts.map +1 -0
  12. package/dist/cache/index.js +24 -22
  13. package/dist/compiler/compiler.d.ts +6 -0
  14. package/dist/compiler/compiler.d.ts.map +1 -0
  15. package/dist/compiler/helpers/attributes.d.ts +4 -0
  16. package/dist/compiler/helpers/attributes.d.ts.map +1 -0
  17. package/dist/compiler/helpers/utils.d.ts +10 -0
  18. package/dist/compiler/helpers/utils.d.ts.map +1 -0
  19. package/dist/compiler/index.d.ts +5 -0
  20. package/dist/compiler/index.d.ts.map +1 -0
  21. package/dist/compiler/types.d.ts +40 -0
  22. package/dist/compiler/types.d.ts.map +1 -0
  23. package/dist/context/index.d.ts +34 -0
  24. package/dist/context/index.d.ts.map +1 -0
  25. package/dist/context/types.d.ts +10 -0
  26. package/dist/context/types.d.ts.map +1 -0
  27. package/dist/dev-server/index.d.ts +30 -0
  28. package/dist/dev-server/index.d.ts.map +1 -0
  29. package/dist/dev-server/index.js +27 -27
  30. package/dist/forms/index.d.ts +58 -0
  31. package/dist/forms/index.d.ts.map +1 -0
  32. package/dist/forms/index.js +1 -1
  33. package/dist/forms/mutations.d.ts +48 -0
  34. package/dist/forms/mutations.d.ts.map +1 -0
  35. package/dist/forms/mutations.js +4 -1
  36. package/dist/hmr/client.d.ts +18 -0
  37. package/dist/hmr/client.d.ts.map +1 -0
  38. package/dist/hmr/client.js +1 -1
  39. package/dist/hmr/index.d.ts +3 -0
  40. package/dist/hmr/index.d.ts.map +1 -0
  41. package/dist/hmr/types.d.ts +42 -0
  42. package/dist/hmr/types.d.ts.map +1 -0
  43. package/dist/hmr/types.js +7 -7
  44. package/dist/hydration/helpers/analyzer.d.ts +9 -0
  45. package/dist/hydration/helpers/analyzer.d.ts.map +1 -0
  46. package/dist/hydration/helpers/hydration.d.ts +19 -0
  47. package/dist/hydration/helpers/hydration.d.ts.map +1 -0
  48. package/dist/hydration/helpers/hydration.js +1 -1
  49. package/dist/hydration/index.d.ts +4 -0
  50. package/dist/hydration/index.d.ts.map +1 -0
  51. package/dist/hydration/types.d.ts +27 -0
  52. package/dist/hydration/types.d.ts.map +1 -0
  53. package/dist/hydration/types.js +32 -8
  54. package/dist/image/index.d.ts +9 -0
  55. package/dist/image/index.d.ts.map +1 -0
  56. package/dist/image/index.js +1 -1
  57. package/dist/image/processor.d.ts +57 -0
  58. package/dist/image/processor.d.ts.map +1 -0
  59. package/dist/image/processor.js +20 -15
  60. package/dist/index.d.ts +20 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +2 -2
  63. package/dist/jsx-dev-runtime.d.ts +11 -0
  64. package/dist/jsx-dev-runtime.d.ts.map +1 -0
  65. package/dist/jsx-runtime.d.ts +11 -0
  66. package/dist/jsx-runtime.d.ts.map +1 -0
  67. package/dist/loader/helpers/loader.d.ts +6 -0
  68. package/dist/loader/helpers/loader.d.ts.map +1 -0
  69. package/dist/loader/index.d.ts +3 -0
  70. package/dist/loader/index.d.ts.map +1 -0
  71. package/dist/loader/types.d.ts +34 -0
  72. package/dist/loader/types.d.ts.map +1 -0
  73. package/dist/markdown/index.d.ts +77 -0
  74. package/dist/markdown/index.d.ts.map +1 -0
  75. package/dist/markdown/index.js +178 -172
  76. package/dist/mdx/index.d.ts +43 -0
  77. package/dist/mdx/index.d.ts.map +1 -0
  78. package/dist/mdx/index.js +46 -40
  79. package/dist/mdx/loader.d.ts +3 -0
  80. package/dist/mdx/loader.d.ts.map +1 -0
  81. package/dist/meta/head-registry.d.ts +5 -0
  82. package/dist/meta/head-registry.d.ts.map +1 -0
  83. package/dist/meta/head.d.ts +29 -0
  84. package/dist/meta/head.d.ts.map +1 -0
  85. package/dist/meta/index.d.ts +91 -0
  86. package/dist/meta/index.d.ts.map +1 -0
  87. package/dist/meta/index.js +16 -16
  88. package/dist/navigation/helpers/navigation.d.ts +15 -0
  89. package/dist/navigation/helpers/navigation.d.ts.map +1 -0
  90. package/dist/navigation/helpers/navigation.js +4 -4
  91. package/dist/navigation/helpers/useNavigate.d.ts +6 -0
  92. package/dist/navigation/helpers/useNavigate.d.ts.map +1 -0
  93. package/dist/navigation/index.d.ts +5 -0
  94. package/dist/navigation/index.d.ts.map +1 -0
  95. package/dist/navigation/types.d.ts +24 -0
  96. package/dist/navigation/types.d.ts.map +1 -0
  97. package/dist/navigation/types.js +1 -2
  98. package/dist/plugin/index.d.ts +73 -0
  99. package/dist/plugin/index.d.ts.map +1 -0
  100. package/dist/plugin/index.js +4 -4
  101. package/dist/router/helpers/path.d.ts +15 -0
  102. package/dist/router/helpers/path.d.ts.map +1 -0
  103. package/dist/router/helpers/route.d.ts +6 -0
  104. package/dist/router/helpers/route.d.ts.map +1 -0
  105. package/dist/router/helpers/route.js +10 -3
  106. package/dist/router/index.d.ts +35 -0
  107. package/dist/router/index.d.ts.map +1 -0
  108. package/dist/router/types.d.ts +30 -0
  109. package/dist/router/types.d.ts.map +1 -0
  110. package/dist/router/types.js +1 -3
  111. package/dist/runtime/helpers/element.d.ts +7 -0
  112. package/dist/runtime/helpers/element.d.ts.map +1 -0
  113. package/dist/runtime/helpers/render.d.ts +8 -0
  114. package/dist/runtime/helpers/render.d.ts.map +1 -0
  115. package/dist/runtime/helpers/render.js +37 -8
  116. package/dist/runtime/index.d.ts +16 -0
  117. package/dist/runtime/index.d.ts.map +1 -0
  118. package/dist/runtime/index.js +63 -7
  119. package/dist/runtime/types.d.ts +65 -0
  120. package/dist/runtime/types.d.ts.map +1 -0
  121. package/dist/signals/helpers/core.d.ts +11 -0
  122. package/dist/signals/helpers/core.d.ts.map +1 -0
  123. package/dist/signals/helpers/core.js +34 -12
  124. package/dist/signals/helpers/utils.d.ts +7 -0
  125. package/dist/signals/helpers/utils.d.ts.map +1 -0
  126. package/dist/signals/index.d.ts +4 -0
  127. package/dist/signals/index.d.ts.map +1 -0
  128. package/dist/signals/types.d.ts +23 -0
  129. package/dist/signals/types.d.ts.map +1 -0
  130. package/dist/ssg/index.d.ts +38 -0
  131. package/dist/ssg/index.d.ts.map +1 -0
  132. package/dist/ssg/index.js +8 -15
  133. package/dist/ssr/helpers/render-html.d.ts +16 -0
  134. package/dist/ssr/helpers/render-html.d.ts.map +1 -0
  135. package/dist/ssr/helpers/render-html.js +3 -2
  136. package/dist/ssr/helpers/ssr.d.ts +14 -0
  137. package/dist/ssr/helpers/ssr.d.ts.map +1 -0
  138. package/dist/ssr/helpers/ssr.js +3 -1
  139. package/dist/ssr/index.d.ts +4 -0
  140. package/dist/ssr/index.d.ts.map +1 -0
  141. package/dist/ssr/types.d.ts +29 -0
  142. package/dist/ssr/types.d.ts.map +1 -0
  143. package/dist/vite-plugin/index.d.ts +5 -0
  144. package/dist/vite-plugin/index.d.ts.map +1 -0
  145. package/dist/vite-plugin/index.js +207 -28
  146. package/dist/vite-plugin/types.d.ts +44 -0
  147. package/dist/vite-plugin/types.d.ts.map +1 -0
  148. package/dist/vite-plugin/types.js +4 -0
  149. package/package.json +12 -10
@@ -0,0 +1,91 @@
1
+ export { Head } from './head.js';
2
+ export type { HeadProps } from './head.js';
3
+ export { registerHeadContent, drainHeadContent, peekHeadContent, clearHeadContent, } from './head-registry.js';
4
+ export interface MetaData {
5
+ title?: string;
6
+ description?: string;
7
+ keywords?: string[];
8
+ author?: string;
9
+ robots?: string;
10
+ canonical?: string;
11
+ openGraph?: OpenGraphData;
12
+ twitter?: TwitterCardData;
13
+ structuredData?: Record<string, unknown>;
14
+ }
15
+ export interface OpenGraphData {
16
+ title?: string;
17
+ description?: string;
18
+ url?: string;
19
+ type?: 'website' | 'article' | 'product' | 'profile';
20
+ images?: OGImage[];
21
+ locale?: string;
22
+ siteName?: string;
23
+ }
24
+ export interface OGImage {
25
+ url: string;
26
+ width?: number;
27
+ height?: number;
28
+ alt?: string;
29
+ }
30
+ export interface TwitterCardData {
31
+ card: 'summary' | 'summary_large_image' | 'app' | 'player';
32
+ site?: string;
33
+ creator?: string;
34
+ title?: string;
35
+ description?: string;
36
+ image?: string;
37
+ imageAlt?: string;
38
+ }
39
+ export declare class MetaGenerator {
40
+ private baseUrl;
41
+ private defaultDescription;
42
+ private defaultTitle;
43
+ private siteName;
44
+ constructor(baseUrl?: string);
45
+ generate(data: MetaData): string;
46
+ private generateBasicMeta;
47
+ private generateCanonical;
48
+ private generateOpenGraph;
49
+ private generateStructuredData;
50
+ private generateTwitter;
51
+ }
52
+ export declare function createMetaGenerator(baseUrl?: string): MetaGenerator;
53
+ export declare function generateMeta(data: MetaData, baseUrl?: string): string;
54
+ export declare function generateBreadcrumbs(items: Array<{
55
+ name: string;
56
+ url: string;
57
+ }>): string;
58
+ export declare function generateArticleSchema(data: {
59
+ title: string;
60
+ description: string;
61
+ author: string;
62
+ publishedAt: string;
63
+ url: string;
64
+ image?: string;
65
+ }): string;
66
+ export declare function generateProductSchema(data: {
67
+ name: string;
68
+ description: string;
69
+ price: string;
70
+ currency?: string;
71
+ availability?: string;
72
+ image?: string;
73
+ }): string;
74
+ export interface MetaLink {
75
+ rel: string;
76
+ href: string;
77
+ type?: string;
78
+ sizes?: string;
79
+ }
80
+ export declare function generateLinks(links: MetaLink[]): string;
81
+ export interface MetaScript {
82
+ src?: string;
83
+ content?: string;
84
+ type?: string;
85
+ async?: boolean;
86
+ defer?: boolean;
87
+ }
88
+ export declare function generateScripts(scripts: MetaScript[]): string;
89
+ export declare const DEFAULT_META: MetaData;
90
+ export declare function mergeMeta(base: MetaData, override: Partial<MetaData>): MetaData;
91
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/meta/index.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,8 @@ export { Head } from './head.js';
2
2
  export { registerHeadContent, drainHeadContent, peekHeadContent, clearHeadContent, } from './head-registry.js';
3
3
  export class MetaGenerator {
4
4
  baseUrl;
5
- defaultTitle = 'EmberKit App';
6
5
  defaultDescription = 'Built with EmberKit';
6
+ defaultTitle = 'EmberKit App';
7
7
  siteName = 'EmberKit';
8
8
  constructor(baseUrl = 'https://example.com') {
9
9
  this.baseUrl = baseUrl;
@@ -35,6 +35,15 @@ export class MetaGenerator {
35
35
  }
36
36
  return tags;
37
37
  }
38
+ generateCanonical(data) {
39
+ if (!data.canonical && this.baseUrl) {
40
+ return [`<link rel="canonical" href="${escapeHtml(this.baseUrl)}">`];
41
+ }
42
+ if (data.canonical) {
43
+ return [`<link rel="canonical" href="${escapeHtml(data.canonical)}">`];
44
+ }
45
+ return [];
46
+ }
38
47
  generateOpenGraph(data) {
39
48
  if (!data.openGraph)
40
49
  return [];
@@ -65,6 +74,12 @@ export class MetaGenerator {
65
74
  }
66
75
  return tags;
67
76
  }
77
+ generateStructuredData(data) {
78
+ if (!data.structuredData)
79
+ return [];
80
+ const json = JSON.stringify(data.structuredData);
81
+ return [`<script type="application/ld+json">${json}</script>`];
82
+ }
68
83
  generateTwitter(data) {
69
84
  if (!data.twitter)
70
85
  return [];
@@ -85,21 +100,6 @@ export class MetaGenerator {
85
100
  tags.push(`<meta name="twitter:creator" content="${escapeHtml(tc.creator)}">`);
86
101
  return tags;
87
102
  }
88
- generateCanonical(data) {
89
- if (!data.canonical && this.baseUrl) {
90
- return [`<link rel="canonical" href="${escapeHtml(this.baseUrl)}">`];
91
- }
92
- if (data.canonical) {
93
- return [`<link rel="canonical" href="${escapeHtml(data.canonical)}">`];
94
- }
95
- return [];
96
- }
97
- generateStructuredData(data) {
98
- if (!data.structuredData)
99
- return [];
100
- const json = JSON.stringify(data.structuredData);
101
- return [`<script type="application/ld+json">${json}</script>`];
102
- }
103
103
  }
104
104
  export function createMetaGenerator(baseUrl) {
105
105
  return new MetaGenerator(baseUrl);
@@ -0,0 +1,15 @@
1
+ import type { NavigationOptions, ViewTransitionOptions } from '../types.js';
2
+ export declare function navigate(to: string, options?: NavigationOptions): Promise<void>;
3
+ export declare function redirect(to: string, status?: number): never;
4
+ export declare function preload(path: string): void;
5
+ export declare function startViewTransition(options?: ViewTransitionOptions): Promise<void>;
6
+ export interface ViewTransition {
7
+ readonly finished: Promise<void>;
8
+ readonly ready: Promise<void>;
9
+ readonly updateCallbackDone: Promise<void>;
10
+ skipTransition: () => void;
11
+ }
12
+ export declare function reload(): void;
13
+ export declare function back(): void;
14
+ export declare function forward(): void;
15
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE5E,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBzF;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,MAAY,GAAG,KAAK,CAQhE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAM1C;AAED,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB5F;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,MAAM,IAAI,IAAI,CAE7B;AAED,wBAAgB,IAAI,IAAI,IAAI,CAE3B;AAED,wBAAgB,OAAO,IAAI,IAAI,CAE9B"}
@@ -7,9 +7,7 @@ export async function navigate(to, options = {}) {
7
7
  history.pushState(state ?? null, '', to);
8
8
  }
9
9
  if (viewTransition) {
10
- const viewTransitionOptions = typeof viewTransition === 'boolean'
11
- ? {}
12
- : viewTransition;
10
+ const viewTransitionOptions = typeof viewTransition === 'boolean' ? {} : viewTransition;
13
11
  await startViewTransition(viewTransitionOptions);
14
12
  }
15
13
  window.dispatchEvent(new PopStateEvent('popstate', { state: history.state }));
@@ -35,7 +33,9 @@ export async function startViewTransition(options = {}) {
35
33
  if (skipTransition) {
36
34
  return;
37
35
  }
38
- if (documentViewTransition && typeof document !== 'undefined' && 'startViewTransition' in document) {
36
+ if (documentViewTransition &&
37
+ typeof document !== 'undefined' &&
38
+ 'startViewTransition' in document) {
39
39
  const transition = document.startViewTransition(async () => {
40
40
  await Promise.resolve();
41
41
  });
@@ -0,0 +1,6 @@
1
+ import type { NavigationOptions } from '../types.js';
2
+ export type UseNavigateOptions = Omit<NavigationOptions, 'viewTransition'> & {
3
+ skipTransition?: boolean;
4
+ };
5
+ export declare function useNavigate(): (path: string, options?: UseNavigateOptions) => Promise<void>;
6
+ //# sourceMappingURL=useNavigate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNavigate.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/useNavigate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,GAAG;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,wBAAgB,WAAW,KACX,MAAM,MAAM,EAAE,UAAS,kBAAuB,mBAQ7D"}
@@ -0,0 +1,5 @@
1
+ export * from './types.js';
2
+ export * from './helpers/navigation.js';
3
+ export { useNavigate } from './helpers/useNavigate.js';
4
+ export type { UseNavigateOptions } from './helpers/useNavigate.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,24 @@
1
+ export type NavigationType = 'push' | 'replace' | 'pop' | 'reload';
2
+ export interface NavigationOptions {
3
+ replace?: boolean;
4
+ state?: Record<string, unknown>;
5
+ viewTransition?: boolean | ViewTransitionOptions;
6
+ }
7
+ export interface ViewTransitionOptions {
8
+ skipTransition?: boolean;
9
+ documentViewTransition?: boolean;
10
+ name?: string;
11
+ types?: string[];
12
+ }
13
+ export interface NavigationState {
14
+ type: NavigationType;
15
+ from: string;
16
+ to: string;
17
+ options?: NavigationOptions;
18
+ }
19
+ export interface NavigationTrigger {
20
+ type: NavigationType;
21
+ delta?: number;
22
+ }
23
+ export declare const VIEW_TRANSITION_API_SUPPORTED: boolean;
24
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/navigation/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,cAAc,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC;CAClD;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,6BAA6B,SAC4B,CAAC"}
@@ -1,2 +1 @@
1
- export const VIEW_TRANSITION_API_SUPPORTED = typeof document !== 'undefined' &&
2
- 'startViewTransition' in document;
1
+ export const VIEW_TRANSITION_API_SUPPORTED = typeof document !== 'undefined' && 'startViewTransition' in document;
@@ -0,0 +1,73 @@
1
+ export interface Plugin {
2
+ name: string;
3
+ version?: string;
4
+ setup: (context: PluginContext) => void | Promise<void>;
5
+ }
6
+ export interface PluginContext {
7
+ config: ResolvedConfig;
8
+ api: PluginAPI;
9
+ onHook: (name: string, callback: HookCallback) => void;
10
+ addWatchFile: (file: string) => void;
11
+ }
12
+ export interface ResolvedConfig {
13
+ mode: 'static' | 'ssr' | 'spa' | 'hybrid';
14
+ root: string;
15
+ outDir: string;
16
+ srcDir: string;
17
+ routesDir: string;
18
+ server: ServerConfig;
19
+ build: BuildConfig;
20
+ }
21
+ export interface ServerConfig {
22
+ port: number;
23
+ host: string;
24
+ cors: boolean;
25
+ }
26
+ export interface BuildConfig {
27
+ target: string;
28
+ minify: boolean;
29
+ sourcemap: boolean;
30
+ }
31
+ export interface PluginAPI {
32
+ resolveId: (id: string, options?: ResolveIdOptions) => Promise<ResolvedId | null>;
33
+ load: (id: string) => Promise<string | null>;
34
+ transform: (code: string, id: string) => Promise<TransformResult | null>;
35
+ render: (html: string, context: RenderContext) => Promise<string>;
36
+ }
37
+ export interface ResolveIdOptions {
38
+ importer?: string;
39
+ skipSelf?: boolean;
40
+ }
41
+ export interface ResolvedId {
42
+ id: string;
43
+ external?: boolean;
44
+ moduleSideEffects?: boolean | null;
45
+ }
46
+ export interface TransformResult {
47
+ code: string;
48
+ map?: string;
49
+ mappings?: string;
50
+ }
51
+ export interface RenderContext {
52
+ url: string;
53
+ params: Record<string, string>;
54
+ head?: string;
55
+ body?: string;
56
+ }
57
+ export type HookCallback = (context?: unknown) => void | Promise<void>;
58
+ export type HookName = 'buildStart' | 'buildEnd' | 'transform' | 'renderStart' | 'renderEnd' | 'configResolved';
59
+ export declare class PluginPipeline {
60
+ private hookCache;
61
+ private plugins;
62
+ addPlugin(plugin: Plugin): void;
63
+ getPlugins(): Plugin[];
64
+ removePlugin(name: string): void;
65
+ runHook(name: HookName, context?: unknown): Promise<void>;
66
+ private invalidateCache;
67
+ }
68
+ export declare function createPluginContext(config: ResolvedConfig, api: PluginAPI): PluginContext;
69
+ export declare function createPluginAPI(): PluginAPI;
70
+ export declare const CORE_PLUGINS: Plugin[];
71
+ export declare function loadPlugin(name: string): Promise<Plugin>;
72
+ export declare function resolvePlugins(plugins: Plugin[], config: ResolvedConfig): Promise<PluginContext[]>;
73
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IACvD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClF,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACzE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvE,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,UAAU,GACV,WAAW,GACX,aAAa,GACb,WAAW,GACX,gBAAgB,CAAC;AAErB,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,OAAO,CAAgB;IAE/B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,UAAU,IAAI,MAAM,EAAE;IAItB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK1B,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,OAAO,CAAC,eAAe;CAGxB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,SAAS,GAAG,aAAa,CAczF;AAED,wBAAgB,eAAe,IAAI,SAAS,CAe3C;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,EAAO,CAAC;AAEzC,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO9D;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAW1B"}
@@ -1,10 +1,13 @@
1
1
  export class PluginPipeline {
2
- plugins = [];
3
2
  hookCache = new Map();
3
+ plugins = [];
4
4
  addPlugin(plugin) {
5
5
  this.plugins.push(plugin);
6
6
  this.invalidateCache();
7
7
  }
8
+ getPlugins() {
9
+ return [...this.plugins];
10
+ }
8
11
  removePlugin(name) {
9
12
  this.plugins = this.plugins.filter((p) => p.name !== name);
10
13
  this.invalidateCache();
@@ -18,9 +21,6 @@ export class PluginPipeline {
18
21
  invalidateCache() {
19
22
  this.hookCache.clear();
20
23
  }
21
- getPlugins() {
22
- return [...this.plugins];
23
- }
24
24
  }
25
25
  export function createPluginContext(config, api) {
26
26
  const hooks = new Map();
@@ -0,0 +1,15 @@
1
+ export declare function normalizePath(path: string): string;
2
+ export declare function pathToRegex(path: string): {
3
+ pattern: RegExp;
4
+ paramNames: string[];
5
+ };
6
+ export declare function matchPath(pattern: RegExp, path: string): string[] | null;
7
+ export declare function scoreRoute(routePath: string): number;
8
+ export declare function extractSegments(filePath: string): string[];
9
+ export declare function segmentsToPath(segments: string[]): string;
10
+ export declare function isIndexFile(fileName: string): boolean;
11
+ export declare function isDynamicSegment(segment: string): boolean;
12
+ export declare function isCatchAll(segment: string): boolean;
13
+ export declare function getParamName(segment: string): string | null;
14
+ export declare function getCatchAllName(segment: string): string | null;
15
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/router/helpers/path.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAiBnF;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAMxE;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmBpD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAK1D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAEzD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK3D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK9D"}
@@ -0,0 +1,6 @@
1
+ import type { Route, RouteMatch } from '../types.js';
2
+ export declare function createRoute(filePath: string, routeDir?: string): Route | null;
3
+ export declare function matchRoute(routes: Route[], pathname: string): RouteMatch | null;
4
+ export declare function sortRoutes(routes: Route[]): Route[];
5
+ export declare function findLayoutChain(routes: Route[], pathname: string): Route[];
6
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/router/helpers/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGrD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAqB,GAAG,KAAK,GAAG,IAAI,CA2D3F;AAwBD,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAwB/E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAEnD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE,CA4B1E"}
@@ -1,7 +1,12 @@
1
1
  import { normalizePath, matchPath, scoreRoute, extractSegments } from './path.js';
2
2
  export function createRoute(filePath, routeDir = 'src/routes') {
3
- const relativePath = filePath.replace(/\\/g, '/').replace(routeDir, '').replace(/\.(tsx|ts|jsx|js|md|mdx)$/, '');
4
- if (relativePath.startsWith('/_api/') || relativePath.startsWith('_api/') || relativePath.includes('/_api/')) {
3
+ const relativePath = filePath
4
+ .replace(/\\/g, '/')
5
+ .replace(routeDir, '')
6
+ .replace(/\.(tsx|ts|jsx|js|md|mdx)$/, '');
7
+ if (relativePath.startsWith('/_api/') ||
8
+ relativePath.startsWith('_api/') ||
9
+ relativePath.includes('/_api/')) {
5
10
  return null;
6
11
  }
7
12
  const isLayout = filePath.includes('/_layout.tsx') || filePath.includes('/_layout.ts');
@@ -96,7 +101,9 @@ export function findLayoutChain(routes, pathname) {
96
101
  for (let i = 0; i <= segments.length; i++) {
97
102
  const pathPrefix = '/' + segments.slice(0, i).join('/');
98
103
  const layout = routes.find((r) => r.isLayout &&
99
- (r.path === pathPrefix || r.path === pathPrefix + '/_layout' || r.path === pathPrefix + '/index'));
104
+ (r.path === pathPrefix ||
105
+ r.path === pathPrefix + '/_layout' ||
106
+ r.path === pathPrefix + '/index'));
100
107
  if (layout) {
101
108
  layouts.push(layout);
102
109
  }
@@ -0,0 +1,35 @@
1
+ import type { Route, RouteMatch, NavigateOptions, RouteParams } from './types.js';
2
+ import { createRoute, matchRoute, sortRoutes, findLayoutChain } from './helpers/route.js';
3
+ export type RouterState = {
4
+ pathname: string;
5
+ params: Record<string, string>;
6
+ query: Record<string, string | string[]>;
7
+ };
8
+ type Listener = (state: RouterState) => void;
9
+ declare class EmberKitRouter {
10
+ private basePath;
11
+ private currentPath;
12
+ private listeners;
13
+ private routes;
14
+ back(): void;
15
+ createHref(path: string): string;
16
+ createRouteParams<T extends Record<string, string>>(params: T): RouteParams<T>;
17
+ forward(): void;
18
+ getBasePath(): string;
19
+ getCurrentPath(): string;
20
+ getLayouts(pathname: string): Route[];
21
+ getRoutes(): Route[];
22
+ initialize(routes: Route[]): void;
23
+ match(pathname: string): RouteMatch | null;
24
+ navigate(path: string, options?: NavigateOptions): void;
25
+ setBasePath(path: string): void;
26
+ subscribe(listener: Listener): () => void;
27
+ private notify;
28
+ private parseQuery;
29
+ }
30
+ export declare const router: EmberKitRouter;
31
+ export declare function createRouter(routes: Route[]): EmberKitRouter;
32
+ export declare function createMemoryRouter(initialPath?: string): EmberKitRouter;
33
+ export { createRoute, matchRoute, sortRoutes, findLayoutChain };
34
+ export type { Route, RouteMatch, NavigateOptions, RouteParams };
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1F,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CAC1C,CAAC;AAEF,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAE7C,cAAM,cAAc;IAClB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,MAAM,CAAe;IAE7B,IAAI,IAAI,IAAI;IAIZ,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAQ9E,OAAO,IAAI,IAAI;IAIf,WAAW,IAAI,MAAM;IAIrB,cAAc,IAAI,MAAM;IAIxB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE;IAIrC,SAAS,IAAI,KAAK,EAAE;IAIpB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;IAKjC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAI1C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;IAavD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI;IAKzC,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,UAAU;CAgCnB;AAED,eAAO,MAAM,MAAM,gBAAuB,CAAC;AAE3C,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,CAI5D;AAED,wBAAgB,kBAAkB,CAAC,WAAW,GAAE,MAAY,GAAG,cAAc,CAI5E;AAED,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;AAChE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,30 @@
1
+ export interface Route {
2
+ path: string;
3
+ pattern: RegExp;
4
+ paramNames: string[];
5
+ filePath: string;
6
+ fileName: string;
7
+ isLayout: boolean;
8
+ isError: boolean;
9
+ isLoading: boolean;
10
+ isApi: boolean;
11
+ }
12
+ export interface RouteMatch {
13
+ route: Route;
14
+ params: Record<string, string>;
15
+ score: number;
16
+ }
17
+ export interface NavigateOptions {
18
+ replace?: boolean;
19
+ state?: Record<string, unknown>;
20
+ }
21
+ export interface RouteParams<T extends Record<string, string> = Record<string, string>> {
22
+ params: T;
23
+ query: Record<string, string | string[]>;
24
+ request: Request;
25
+ }
26
+ export type RouteHandler = (params: RouteParams) => Promise<unknown> | unknown;
27
+ export declare const SPECIAL_FILES: Set<string>;
28
+ export declare const PARAM_REGEX: RegExp;
29
+ export declare const CATCH_ALL_REGEX: RegExp;
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/router/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IACpF,MAAM,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACzC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAE/E,eAAO,MAAM,aAAa,aAAsD,CAAC;AAEjF,eAAO,MAAM,WAAW,QAAkB,CAAC;AAC3C,eAAO,MAAM,eAAe,QAAqB,CAAC"}
@@ -1,5 +1,3 @@
1
- export const SPECIAL_FILES = new Set([
2
- '_layout', '_error', '_loading', 'index',
3
- ]);
1
+ export const SPECIAL_FILES = new Set(['_layout', '_error', '_loading', 'index']);
4
2
  export const PARAM_REGEX = /\[([^\]]+)\]/g;
5
3
  export const CATCH_ALL_REGEX = /\[\.\.\.(\w+)\]/g;
@@ -0,0 +1,7 @@
1
+ import type { JSXElementProps, JSXNode, DOMElement } from '../types.js';
2
+ export declare function createElement(type: string | ((props: JSXElementProps) => JSXNode), props: JSXElementProps | null, ...children: JSXNode[]): DOMElement;
3
+ export declare function isValidElement(element: unknown): element is DOMElement;
4
+ export declare function isComponent(type: unknown): type is (props: JSXElementProps) => JSXNode;
5
+ export declare function flattenChildren(children: unknown[]): JSXNode[];
6
+ export declare function resolveComponent(type: string | ((props: JSXElementProps) => JSXNode), props: JSXElementProps): DOMElement;
7
+ //# sourceMappingURL=element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../../src/runtime/helpers/element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAExE,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,EACpD,KAAK,EAAE,eAAe,GAAG,IAAI,EAC7B,GAAG,QAAQ,EAAE,OAAO,EAAE,GACrB,UAAU,CAcZ;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,UAAU,CAItE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAEtF;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAe9D;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,EACpD,KAAK,EAAE,eAAe,GACrB,UAAU,CAaZ"}
@@ -0,0 +1,8 @@
1
+ import type { JSXElement, JSXElementProps, JSXNode } from '../types.js';
2
+ export declare function getHandler(id: string): ((e: Event) => void) | undefined;
3
+ export declare function clearHandlers(): void;
4
+ export declare function renderElementToHTML(element: JSXElement): string;
5
+ export declare function renderToString(element: JSXElement | string | null | number | unknown[]): string;
6
+ export declare function getComponentName(type: string | ((props: JSXElementProps) => JSXNode)): string;
7
+ export declare function createPropsProxy(props: JSXElementProps): JSXElementProps;
8
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/runtime/helpers/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAuBpF,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,CAEvE;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CA+G/D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,MAAM,CAO/F;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,GAAG,MAAM,CAM7F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CASxE"}
@@ -1,5 +1,17 @@
1
1
  const SELF_CLOSING_TAGS = new Set([
2
- 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'source', 'track', 'wbr',
2
+ 'area',
3
+ 'base',
4
+ 'br',
5
+ 'col',
6
+ 'embed',
7
+ 'hr',
8
+ 'img',
9
+ 'input',
10
+ 'link',
11
+ 'meta',
12
+ 'source',
13
+ 'track',
14
+ 'wbr',
3
15
  ]);
4
16
  let handlerCounter = 0;
5
17
  const handlerRegistry = new Map();
@@ -53,16 +65,16 @@ export function renderElementToHTML(element) {
53
65
  }
54
66
  const rawChildren = props.children ?? [];
55
67
  const children = Array.isArray(rawChildren) ? rawChildren : [rawChildren];
56
- const childHtml = children
57
- .map((child) => renderToString(child))
58
- .join('');
68
+ const childHtml = children.map((child) => renderToString(child)).join('');
59
69
  if (currentType === 'Fragment' || currentType === 'React.Fragment') {
60
70
  return childHtml;
61
71
  }
62
72
  // Handle dangerouslySetInnerHTML
63
73
  let innerHtml = childHtml;
64
74
  for (const [, value] of Object.entries(props)) {
65
- if (typeof value === 'object' && value !== null && '__html' in value) {
75
+ if (typeof value === 'object' &&
76
+ value !== null &&
77
+ '__html' in value) {
66
78
  innerHtml = String(value.__html);
67
79
  break;
68
80
  }
@@ -71,22 +83,39 @@ export function renderElementToHTML(element) {
71
83
  .filter(([key, value]) => {
72
84
  if (key === 'children' || key === 'key')
73
85
  return false;
74
- if (typeof value === 'object' && value !== null && '__html' in value)
86
+ if (typeof value === 'object' &&
87
+ value !== null &&
88
+ '__html' in value)
89
+ return false;
90
+ if (value == null)
91
+ return false;
92
+ if (typeof value === 'function' && key !== 'data-ek-bind')
75
93
  return false;
76
94
  return true;
77
95
  })
78
- .filter(([, value]) => typeof value !== 'function' && value != null)
79
96
  .map(([key, value]) => {
80
- // Map React/JSX prop names to HTML attributes
81
97
  if (key === 'className')
82
98
  key = 'class';
83
99
  if (key === 'strokeWidth' || key === 'strokeLinecap' || key === 'strokeLinejoin') {
84
100
  key = key.replace(/([A-Z])/g, '-$1').toLowerCase();
85
101
  }
102
+ if (key === 'data-ek-bind' && typeof value === 'function' && value.__idx != null) {
103
+ return ` data-ek-bind="${value.__idx}"`;
104
+ }
86
105
  if (value === true)
87
106
  return ` ${key}`;
88
107
  if (value === false)
89
108
  return '';
109
+ if (key === 'style' && typeof value === 'object' && value !== null) {
110
+ const styleStr = Object.entries(value)
111
+ .filter(([, v]) => v != null)
112
+ .map(([prop, val]) => {
113
+ const cssProp = prop.replace(/([A-Z])/g, '-$1').toLowerCase();
114
+ return `${cssProp}: ${val}`;
115
+ })
116
+ .join('; ');
117
+ return ` ${key}="${styleStr}"`;
118
+ }
90
119
  return ` ${key}="${value}"`;
91
120
  })
92
121
  .join('');
@@ -0,0 +1,16 @@
1
+ import type { JSXElementProps, JSXNode, DOMElement, JSXElement } from './types.js';
2
+ export declare function createElement(type: string | ((props: JSXElementProps) => JSXNode), props?: Record<string, unknown> | null, ...children: unknown[]): DOMElement;
3
+ export declare function render(element: JSXElement | string | null | ((props: Record<string, unknown>) => JSXNode), container: Element | string, options?: {
4
+ hydrate?: boolean;
5
+ routes?: Array<{
6
+ path: string;
7
+ component: () => Promise<{
8
+ default: (props: Record<string, unknown>) => JSXNode;
9
+ }>;
10
+ }>;
11
+ }): void;
12
+ export declare function hydrate(element: JSXElement | string | null, container: Element | string): void;
13
+ export declare function flushSync(fn: () => void): void;
14
+ export declare function isElement(element: unknown): element is JSXElement;
15
+ export { type JSXElement, type JSXNode };
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAInF,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,EACpD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACtC,GAAG,QAAQ,EAAE,OAAO,EAAE,GACrB,UAAU,CAYZ;AA6FD,wBAAgB,MAAM,CACpB,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,EACnF,SAAS,EAAE,OAAO,GAAG,MAAM,EAC3B,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;SAAE,CAAC,CAAC;KACpF,CAAC,CAAC;CACJ,GACA,IAAI,CAyFN;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAE9F;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAE9C;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,UAAU,CAEjE;AAED,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,CAAC"}