@emkodev/emroute 1.6.2 → 1.6.4

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 (128) hide show
  1. package/README.md +6 -6
  2. package/dist/runtime/abstract.runtime.d.ts +94 -0
  3. package/dist/runtime/abstract.runtime.js +339 -0
  4. package/dist/runtime/abstract.runtime.js.map +1 -0
  5. package/dist/runtime/bun/esbuild-runtime-loader.plugin.d.ts +25 -0
  6. package/dist/runtime/bun/esbuild-runtime-loader.plugin.js +72 -0
  7. package/dist/runtime/bun/esbuild-runtime-loader.plugin.js.map +1 -0
  8. package/dist/runtime/bun/fs/bun-fs.runtime.d.ts +21 -0
  9. package/dist/runtime/bun/fs/bun-fs.runtime.js +205 -0
  10. package/dist/runtime/bun/fs/bun-fs.runtime.js.map +1 -0
  11. package/dist/runtime/bun/sqlite/bun-sqlite.runtime.d.ts +27 -0
  12. package/dist/runtime/bun/sqlite/bun-sqlite.runtime.js +234 -0
  13. package/dist/runtime/bun/sqlite/bun-sqlite.runtime.js.map +1 -0
  14. package/dist/runtime/sitemap.generator.d.ts +58 -0
  15. package/dist/runtime/sitemap.generator.js +107 -0
  16. package/dist/runtime/sitemap.generator.js.map +1 -0
  17. package/dist/runtime/universal/fs/universal-fs.runtime.d.ts +29 -0
  18. package/dist/runtime/universal/fs/universal-fs.runtime.js +213 -0
  19. package/dist/runtime/universal/fs/universal-fs.runtime.js.map +1 -0
  20. package/dist/server/codegen.util.d.ts +16 -0
  21. package/dist/server/codegen.util.js +46 -0
  22. package/dist/server/codegen.util.js.map +1 -0
  23. package/dist/server/emroute.server.d.ts +37 -0
  24. package/dist/server/emroute.server.js +314 -0
  25. package/dist/server/emroute.server.js.map +1 -0
  26. package/dist/server/esbuild-manifest.plugin.d.ts +26 -0
  27. package/dist/server/esbuild-manifest.plugin.js +187 -0
  28. package/dist/server/esbuild-manifest.plugin.js.map +1 -0
  29. package/dist/server/scanner.util.d.ts +22 -0
  30. package/dist/server/scanner.util.js +194 -0
  31. package/dist/server/scanner.util.js.map +1 -0
  32. package/dist/server/server-api.type.d.ts +71 -0
  33. package/dist/server/server-api.type.js +9 -0
  34. package/dist/server/server-api.type.js.map +1 -0
  35. package/dist/src/component/abstract.component.d.ts +197 -0
  36. package/dist/src/component/abstract.component.js +84 -0
  37. package/dist/src/component/abstract.component.js.map +1 -0
  38. package/dist/src/component/page.component.d.ts +74 -0
  39. package/dist/src/component/page.component.js +107 -0
  40. package/dist/src/component/page.component.js.map +1 -0
  41. package/dist/src/component/widget.component.d.ts +47 -0
  42. package/dist/src/component/widget.component.js +69 -0
  43. package/dist/src/component/widget.component.js.map +1 -0
  44. package/dist/src/element/component.element.d.ts +79 -0
  45. package/dist/src/element/component.element.js +293 -0
  46. package/dist/src/element/component.element.js.map +1 -0
  47. package/dist/src/element/markdown.element.d.ts +36 -0
  48. package/dist/src/element/markdown.element.js +93 -0
  49. package/dist/src/element/markdown.element.js.map +1 -0
  50. package/dist/src/element/slot.element.d.ts +30 -0
  51. package/dist/src/element/slot.element.js +31 -0
  52. package/dist/src/element/slot.element.js.map +1 -0
  53. package/dist/src/index.d.ts +23 -0
  54. package/dist/src/index.js +24 -0
  55. package/dist/src/index.js.map +1 -0
  56. package/dist/src/overlay/mod.d.ts +9 -0
  57. package/dist/src/overlay/mod.js +9 -0
  58. package/dist/src/overlay/mod.js.map +1 -0
  59. package/dist/src/overlay/overlay.css.d.ts +8 -0
  60. package/dist/src/overlay/overlay.css.js +170 -0
  61. package/dist/src/overlay/overlay.css.js.map +1 -0
  62. package/dist/src/overlay/overlay.service.d.ts +14 -0
  63. package/dist/src/overlay/overlay.service.js +307 -0
  64. package/dist/src/overlay/overlay.service.js.map +1 -0
  65. package/dist/src/overlay/overlay.type.d.ts +33 -0
  66. package/dist/src/overlay/overlay.type.js +11 -0
  67. package/dist/src/overlay/overlay.type.js.map +1 -0
  68. package/dist/src/renderer/spa/base.renderer.d.ts +39 -0
  69. package/dist/src/renderer/spa/base.renderer.js +149 -0
  70. package/dist/src/renderer/spa/base.renderer.js.map +1 -0
  71. package/dist/src/renderer/spa/hash.renderer.d.ts +78 -0
  72. package/dist/src/renderer/spa/hash.renderer.js +162 -0
  73. package/dist/src/renderer/spa/hash.renderer.js.map +1 -0
  74. package/dist/src/renderer/spa/html.renderer.d.ts +81 -0
  75. package/dist/src/renderer/spa/html.renderer.js +304 -0
  76. package/dist/src/renderer/spa/html.renderer.js.map +1 -0
  77. package/dist/src/renderer/spa/mod.d.ts +30 -0
  78. package/dist/src/renderer/spa/mod.js +35 -0
  79. package/dist/src/renderer/spa/mod.js.map +1 -0
  80. package/dist/src/renderer/ssr/html.renderer.d.ts +49 -0
  81. package/dist/src/renderer/ssr/html.renderer.js +108 -0
  82. package/dist/src/renderer/ssr/html.renderer.js.map +1 -0
  83. package/dist/src/renderer/ssr/md.renderer.d.ts +40 -0
  84. package/dist/src/renderer/ssr/md.renderer.js +100 -0
  85. package/dist/src/renderer/ssr/md.renderer.js.map +1 -0
  86. package/dist/src/renderer/ssr/ssr.renderer.d.ts +74 -0
  87. package/dist/src/renderer/ssr/ssr.renderer.js +185 -0
  88. package/dist/src/renderer/ssr/ssr.renderer.js.map +1 -0
  89. package/dist/src/route/route.core.d.ts +129 -0
  90. package/dist/src/route/route.core.js +255 -0
  91. package/dist/src/route/route.core.js.map +1 -0
  92. package/dist/src/route/route.matcher.d.ts +86 -0
  93. package/dist/src/route/route.matcher.js +214 -0
  94. package/dist/src/route/route.matcher.js.map +1 -0
  95. package/dist/src/type/logger.type.d.ts +17 -0
  96. package/dist/src/type/logger.type.js +9 -0
  97. package/dist/src/type/logger.type.js.map +1 -0
  98. package/dist/src/type/markdown.type.d.ts +20 -0
  99. package/dist/src/type/markdown.type.js +2 -0
  100. package/dist/src/type/markdown.type.js.map +1 -0
  101. package/dist/src/type/route.type.d.ts +112 -0
  102. package/dist/src/type/route.type.js +8 -0
  103. package/dist/src/type/route.type.js.map +1 -0
  104. package/dist/src/type/widget.type.d.ts +55 -0
  105. package/dist/src/type/widget.type.js +10 -0
  106. package/dist/src/type/widget.type.js.map +1 -0
  107. package/dist/src/util/html.util.d.ts +29 -0
  108. package/dist/src/util/html.util.js +158 -0
  109. package/dist/src/util/html.util.js.map +1 -0
  110. package/dist/src/util/logger.util.d.ts +26 -0
  111. package/dist/src/util/logger.util.js +80 -0
  112. package/dist/src/util/logger.util.js.map +1 -0
  113. package/dist/src/util/widget-resolve.util.d.ts +52 -0
  114. package/dist/src/util/widget-resolve.util.js +149 -0
  115. package/dist/src/util/widget-resolve.util.js.map +1 -0
  116. package/dist/src/widget/breadcrumb.widget.d.ts +48 -0
  117. package/dist/src/widget/breadcrumb.widget.js +72 -0
  118. package/dist/src/widget/breadcrumb.widget.js.map +1 -0
  119. package/dist/src/widget/page-title.widget.d.ts +33 -0
  120. package/dist/src/widget/page-title.widget.js +33 -0
  121. package/dist/src/widget/page-title.widget.js.map +1 -0
  122. package/dist/src/widget/widget.parser.d.ts +26 -0
  123. package/dist/src/widget/widget.parser.js +76 -0
  124. package/dist/src/widget/widget.parser.js.map +1 -0
  125. package/dist/src/widget/widget.registry.d.ts +23 -0
  126. package/dist/src/widget/widget.registry.js +42 -0
  127. package/dist/src/widget/widget.registry.js.map +1 -0
  128. package/package.json +63 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sitemap.generator.js","sourceRoot":"","sources":["../../runtime/sitemap.generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type FetchParams, type FetchReturn, Runtime, type RuntimeConfig } from '../../abstract.runtime.ts';
2
+ /**
3
+ * Filesystem runtime using only `node:` APIs and esbuild. Works on Node,
4
+ * Deno, and Bun without platform-specific dependencies.
5
+ *
6
+ * Not recommended for production — `node:fs/promises` has higher overhead
7
+ * than platform-native alternatives (e.g. `Bun.file()`). Use
8
+ * {@link BunFsRuntime} on Bun for better I/O performance.
9
+ */
10
+ export declare class UniversalFsRuntime extends Runtime {
11
+ private readonly root;
12
+ constructor(root: string, config?: RuntimeConfig);
13
+ handle(resource: FetchParams[0], init?: FetchParams[1]): FetchReturn;
14
+ query(resource: FetchParams[0], options: FetchParams[1] & {
15
+ as: 'text';
16
+ }): Promise<string>;
17
+ query(resource: FetchParams[0], options?: FetchParams[1]): FetchReturn;
18
+ private parsePath;
19
+ private parse;
20
+ private read;
21
+ private list;
22
+ private write;
23
+ loadModule(path: string): Promise<unknown>;
24
+ bundle(): Promise<void>;
25
+ private static _esbuild;
26
+ private static esbuild;
27
+ static transpile(source: string): Promise<string>;
28
+ static stopBundler(): Promise<void>;
29
+ }
@@ -0,0 +1,213 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { readFile, writeFile, stat, readdir, mkdir } from 'node:fs/promises';
10
+ import { createRequire } from 'node:module';
11
+ import { resolve } from 'node:path';
12
+ import { CONTENT_TYPES, DEFAULT_ROUTES_DIR, DEFAULT_WIDGETS_DIR, EMROUTE_EXTERNALS, ROUTES_MANIFEST_PATH, Runtime, WIDGETS_MANIFEST_PATH, } from "../../abstract.runtime.js";
13
+ import { createManifestPlugin } from "../../../server/esbuild-manifest.plugin.js";
14
+ import { createRuntimeLoaderPlugin } from "../../bun/esbuild-runtime-loader.plugin.js";
15
+ import { generateMainTs } from "../../../server/codegen.util.js";
16
+ /**
17
+ * Filesystem runtime using only `node:` APIs and esbuild. Works on Node,
18
+ * Deno, and Bun without platform-specific dependencies.
19
+ *
20
+ * Not recommended for production — `node:fs/promises` has higher overhead
21
+ * than platform-native alternatives (e.g. `Bun.file()`). Use
22
+ * {@link BunFsRuntime} on Bun for better I/O performance.
23
+ */
24
+ export class UniversalFsRuntime extends Runtime {
25
+ root;
26
+ constructor(root, config = {}) {
27
+ if (config.entryPoint && !config.bundlePaths) {
28
+ config.bundlePaths = { emroute: '/emroute.js', app: '/app.js' };
29
+ }
30
+ super(config);
31
+ const abs = resolve(root);
32
+ this.root = abs.endsWith('/') ? abs.slice(0, -1) : abs;
33
+ }
34
+ handle(resource, init) {
35
+ const [pathname, method, body] = this.parse(resource, init);
36
+ const path = `${this.root}${pathname}`;
37
+ switch (method) {
38
+ case 'PUT':
39
+ return this.write(path, body);
40
+ default:
41
+ return this.read(path);
42
+ }
43
+ }
44
+ query(resource, options) {
45
+ if (options?.as === 'text') {
46
+ const pathname = this.parsePath(resource);
47
+ return readFile(`${this.root}${pathname}`, 'utf-8');
48
+ }
49
+ return this.handle(resource, options);
50
+ }
51
+ parsePath(resource) {
52
+ if (typeof resource === 'string')
53
+ return decodeURIComponent(resource);
54
+ if (resource instanceof URL)
55
+ return decodeURIComponent(resource.pathname);
56
+ return decodeURIComponent(new URL(resource.url).pathname);
57
+ }
58
+ parse(resource, init) {
59
+ const pathname = this.parsePath(resource);
60
+ if (typeof resource === 'string' || resource instanceof URL) {
61
+ return [pathname, init?.method ?? 'GET', init?.body ?? null];
62
+ }
63
+ return [
64
+ pathname,
65
+ init?.method ?? resource.method,
66
+ init?.body ?? resource.body,
67
+ ];
68
+ }
69
+ async read(path) {
70
+ try {
71
+ const info = await stat(path);
72
+ if (info.isDirectory()) {
73
+ return this.list(path);
74
+ }
75
+ const content = new Uint8Array(await readFile(path));
76
+ const ext = path.slice(path.lastIndexOf('.')).toLowerCase();
77
+ const headers = {
78
+ 'Content-Type': CONTENT_TYPES.get(ext) ?? 'application/octet-stream',
79
+ 'Content-Length': content.byteLength.toString(),
80
+ };
81
+ if (info.mtime) {
82
+ headers['Last-Modified'] = info.mtime.toUTCString();
83
+ }
84
+ return new Response(content, { status: 200, headers });
85
+ }
86
+ catch (error) {
87
+ if (error.code === 'ENOENT') {
88
+ const pathname = path.slice(this.root.length);
89
+ if (pathname === ROUTES_MANIFEST_PATH)
90
+ return this.resolveRoutesManifest();
91
+ if (pathname === WIDGETS_MANIFEST_PATH)
92
+ return this.resolveWidgetsManifest();
93
+ return new Response('Not Found', { status: 404 });
94
+ }
95
+ return new Response(`Internal Error: ${error}`, { status: 500 });
96
+ }
97
+ }
98
+ async list(path) {
99
+ const entries = [];
100
+ const dirents = await readdir(path, { withFileTypes: true });
101
+ for (const entry of dirents) {
102
+ entries.push(entry.name + (entry.isDirectory() ? '/' : ''));
103
+ }
104
+ return Response.json(entries);
105
+ }
106
+ async write(path, body) {
107
+ try {
108
+ const content = body
109
+ ? new Uint8Array(await new Response(body).arrayBuffer())
110
+ : new Uint8Array();
111
+ const dir = path.slice(0, path.lastIndexOf('/'));
112
+ if (dir)
113
+ await mkdir(dir, { recursive: true });
114
+ await writeFile(path, content);
115
+ return new Response(null, { status: 204 });
116
+ }
117
+ catch (error) {
118
+ return new Response(`Write failed: ${error}`, { status: 500 });
119
+ }
120
+ }
121
+ loadModule(path) {
122
+ return import(__rewriteRelativeImportExtension(this.root + path));
123
+ }
124
+ // ── Bundling ─────────────────────────────────────────────────────────
125
+ async bundle() {
126
+ if (this.config.spa === 'none')
127
+ return;
128
+ const paths = this.config.bundlePaths;
129
+ if (!paths)
130
+ return;
131
+ const esbuild = await UniversalFsRuntime.esbuild();
132
+ const builds = [];
133
+ const shared = { bundle: true, write: false, format: 'esm', platform: 'browser' };
134
+ const runtimeLoader = createRuntimeLoaderPlugin({ runtime: this, root: this.root });
135
+ // Emroute SPA bundle — resolve from consumer's node_modules (no runtime loader needed)
136
+ const consumerRequire = createRequire(this.root + '/');
137
+ const spaEntry = consumerRequire.resolve('@emkodev/emroute/spa');
138
+ builds.push(esbuild.build({
139
+ ...shared,
140
+ entryPoints: [spaEntry],
141
+ outfile: `${this.root}${paths.emroute}`,
142
+ }));
143
+ // App bundle — generate main.ts if absent, virtual plugin resolves manifests
144
+ if (this.config.entryPoint) {
145
+ if ((await this.query(this.config.entryPoint)).status === 404) {
146
+ const hasRoutes = (await this.query((this.config.routesDir ?? DEFAULT_ROUTES_DIR) + '/')).status !== 404;
147
+ const hasWidgets = (await this.query((this.config.widgetsDir ?? DEFAULT_WIDGETS_DIR) + '/')).status !== 404;
148
+ const code = generateMainTs('root', hasRoutes, hasWidgets, '@emkodev/emroute');
149
+ await this.command(this.config.entryPoint, { body: code });
150
+ }
151
+ const manifestPlugin = createManifestPlugin({
152
+ runtime: this,
153
+ basePath: '/html',
154
+ resolveDir: this.root,
155
+ });
156
+ builds.push(esbuild.build({
157
+ ...shared,
158
+ entryPoints: [`${this.root}${this.config.entryPoint}`],
159
+ outfile: `${this.root}${paths.app}`,
160
+ external: [...EMROUTE_EXTERNALS],
161
+ plugins: [manifestPlugin, runtimeLoader],
162
+ }));
163
+ }
164
+ // Widgets bundle
165
+ if (paths.widgets) {
166
+ const widgetsTsPath = paths.widgets.replace('.js', '.ts');
167
+ if ((await this.query(widgetsTsPath)).status !== 404) {
168
+ builds.push(esbuild.build({
169
+ ...shared,
170
+ entryPoints: [`${this.root}${widgetsTsPath}`],
171
+ outfile: `${this.root}${paths.widgets}`,
172
+ external: [...EMROUTE_EXTERNALS],
173
+ plugins: [runtimeLoader],
174
+ }));
175
+ }
176
+ }
177
+ const results = await Promise.all(builds);
178
+ // Write all output files through the runtime
179
+ for (const result of results) {
180
+ for (const file of result.outputFiles) {
181
+ const runtimePath = file.path.startsWith(this.root)
182
+ ? file.path.slice(this.root.length)
183
+ : '/' + file.path;
184
+ await this.command(runtimePath, { body: file.contents });
185
+ }
186
+ }
187
+ await this.writeShell(paths);
188
+ await esbuild.stop();
189
+ UniversalFsRuntime._esbuild = null;
190
+ }
191
+ // ── Transpile / esbuild ───────────────────────────────────────────────
192
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
193
+ static _esbuild = null;
194
+ static async esbuild() {
195
+ if (!UniversalFsRuntime._esbuild) {
196
+ const consumerRequire = createRequire(process.cwd() + '/');
197
+ UniversalFsRuntime._esbuild = consumerRequire('esbuild');
198
+ }
199
+ return UniversalFsRuntime._esbuild;
200
+ }
201
+ static async transpile(source) {
202
+ const esbuild = await UniversalFsRuntime.esbuild();
203
+ const result = await esbuild.transform(source, { loader: 'ts' });
204
+ return result.code;
205
+ }
206
+ static async stopBundler() {
207
+ if (UniversalFsRuntime._esbuild) {
208
+ await UniversalFsRuntime._esbuild.stop();
209
+ UniversalFsRuntime._esbuild = null;
210
+ }
211
+ }
212
+ }
213
+ //# sourceMappingURL=universal-fs.runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"universal-fs.runtime.js","sourceRoot":"","sources":["../../../../runtime/universal/fs/universal-fs.runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Code Generation Utilities
3
+ *
4
+ * Generates a default main.ts entry point for SPA bootstrapping.
5
+ * Manifest data is resolved at bundle time via the esbuild virtual
6
+ * manifest plugin (`emroute:routes`, `emroute:widgets`).
7
+ */
8
+ import type { BasePath } from '../src/route/route.core.ts';
9
+ import type { SpaMode } from '../src/type/widget.type.ts';
10
+ /**
11
+ * Generate a main.ts entry point for SPA bootstrapping.
12
+ *
13
+ * Imports route and widget manifests from virtual `emroute:` specifiers
14
+ * that the esbuild manifest plugin resolves at bundle time.
15
+ */
16
+ export declare function generateMainTs(spa: SpaMode, hasRoutes: boolean, hasWidgets: boolean, importPath: string, basePath?: BasePath): string;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Code Generation Utilities
3
+ *
4
+ * Generates a default main.ts entry point for SPA bootstrapping.
5
+ * Manifest data is resolved at bundle time via the esbuild virtual
6
+ * manifest plugin (`emroute:routes`, `emroute:widgets`).
7
+ */
8
+ /**
9
+ * Generate a main.ts entry point for SPA bootstrapping.
10
+ *
11
+ * Imports route and widget manifests from virtual `emroute:` specifiers
12
+ * that the esbuild manifest plugin resolves at bundle time.
13
+ */
14
+ export function generateMainTs(spa, hasRoutes, hasWidgets, importPath, basePath) {
15
+ const imports = [];
16
+ const body = [];
17
+ const spaImport = `${importPath}/spa`;
18
+ if (hasRoutes) {
19
+ imports.push(`import { routesManifest } from 'emroute:routes';`);
20
+ }
21
+ if (hasWidgets) {
22
+ imports.push(`import { ComponentElement } from '${spaImport}';`);
23
+ imports.push(`import { widgetsManifest } from 'emroute:widgets';`);
24
+ body.push('for (const entry of widgetsManifest.widgets) {');
25
+ body.push(' const mod = await widgetsManifest.moduleLoaders![entry.modulePath]() as Record<string, unknown>;');
26
+ body.push(' for (const exp of Object.values(mod)) {');
27
+ body.push(" if (exp && typeof exp === 'object' && 'getData' in exp) {");
28
+ body.push(' ComponentElement.register(exp as any, entry.files);');
29
+ body.push(' break;');
30
+ body.push(' }');
31
+ body.push(" if (typeof exp === 'function' && exp.prototype?.getData) {");
32
+ body.push(' ComponentElement.registerClass(exp as new () => any, entry.name, entry.files);');
33
+ body.push(' break;');
34
+ body.push(' }');
35
+ body.push(' }');
36
+ body.push('}');
37
+ }
38
+ if ((spa === 'root' || spa === 'only') && hasRoutes) {
39
+ imports.push(`import { createSpaHtmlRouter } from '${spaImport}';`);
40
+ const bpOpt = basePath ? `basePath: { html: '${basePath.html}', md: '${basePath.md}' }` : '';
41
+ const opts = bpOpt ? `{ ${bpOpt} }` : '';
42
+ body.push(`await createSpaHtmlRouter(routesManifest${opts ? `, ${opts}` : ''});`);
43
+ }
44
+ return `/** Auto-generated entry point — do not edit. */\n${imports.join('\n')}\n\n${body.join('\n')}\n`;
45
+ }
46
+ //# sourceMappingURL=codegen.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.util.js","sourceRoot":"","sources":["../../server/codegen.util.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAY,EACZ,SAAkB,EAClB,UAAmB,EACnB,UAAkB,EAClB,QAAmB;IAEnB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,MAAM,SAAS,GAAG,GAAG,UAAU,MAAM,CAAC;IAEtC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,qCAAqC,SAAS,IAAI,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,CACP,oGAAoG,CACrG,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAC5E,IAAI,CAAC,IAAI,CACP,sFAAsF,CACvF,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,wCAAwC,SAAS,IAAI,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,sBAAsB,QAAQ,CAAC,IAAI,WAAW,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,2CAA2C,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,qDAAqD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAC5E,IAAI,CAAC,IAAI,CAAC,IAAI,CAChB,IAAI,CAAC;AACP,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Emroute Server
3
+ *
4
+ * Runtime-agnostic server that handles SSR rendering, manifest resolution,
5
+ * static file serving, and route matching. Works with any Runtime implementation.
6
+ *
7
+ * Usage (standalone):
8
+ * ```ts
9
+ * import { createEmrouteServer } from '@emkodev/emroute/server';
10
+ * import { BunFsRuntime } from '@emkodev/emroute/runtime/bun/fs';
11
+ *
12
+ * const runtime = new BunFsRuntime('.', { routesDir: '/routes' });
13
+ * const emroute = await createEmrouteServer({ spa: 'root' }, runtime);
14
+ *
15
+ * Bun.serve({ fetch: (req) => emroute.handleRequest(req) ?? new Response('Not Found', { status: 404 }) });
16
+ * ```
17
+ *
18
+ * Usage (composable):
19
+ * ```ts
20
+ * const emroute = await createEmrouteServer(config, runtime);
21
+ *
22
+ * Bun.serve({ async fetch(req) {
23
+ * if (isApiRoute(req)) return handleApi(req);
24
+ * const response = await emroute.handleRequest(req);
25
+ * if (response) return response;
26
+ * return new Response('Not Found', { status: 404 });
27
+ * }});
28
+ * ```
29
+ */
30
+ import { Runtime } from '../runtime/abstract.runtime.ts';
31
+ import type { EmrouteServer, EmrouteServerConfig } from './server-api.type.ts';
32
+ /**
33
+ * Create an emroute server.
34
+ *
35
+ * All paths are Runtime-relative (starting with `/`). Runtime root = appRoot.
36
+ */
37
+ export declare function createEmrouteServer(config: EmrouteServerConfig, runtime: Runtime): Promise<EmrouteServer>;