@emkodev/emroute 1.6.6-beta.2 → 1.6.6-beta.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 (97) hide show
  1. package/dist/emroute.js +2757 -0
  2. package/dist/emroute.js.map +7 -0
  3. package/dist/runtime/abstract.runtime.d.ts +0 -28
  4. package/dist/runtime/abstract.runtime.js +10 -58
  5. package/dist/runtime/abstract.runtime.js.map +1 -1
  6. package/dist/runtime/bun/esbuild-runtime-loader.plugin.js +3 -0
  7. package/dist/runtime/bun/esbuild-runtime-loader.plugin.js.map +1 -1
  8. package/dist/runtime/bun/fs/bun-fs.runtime.d.ts +0 -5
  9. package/dist/runtime/bun/fs/bun-fs.runtime.js +1 -95
  10. package/dist/runtime/bun/fs/bun-fs.runtime.js.map +1 -1
  11. package/dist/runtime/bun/sqlite/bun-sqlite.runtime.d.ts +0 -5
  12. package/dist/runtime/bun/sqlite/bun-sqlite.runtime.js +2 -96
  13. package/dist/runtime/bun/sqlite/bun-sqlite.runtime.js.map +1 -1
  14. package/dist/runtime/fetch.runtime.d.ts +26 -0
  15. package/dist/runtime/fetch.runtime.js +55 -0
  16. package/dist/runtime/fetch.runtime.js.map +1 -0
  17. package/dist/runtime/sitemap.generator.d.ts +4 -4
  18. package/dist/runtime/sitemap.generator.js +32 -11
  19. package/dist/runtime/sitemap.generator.js.map +1 -1
  20. package/dist/runtime/universal/fs/universal-fs.runtime.d.ts +0 -5
  21. package/dist/runtime/universal/fs/universal-fs.runtime.js +1 -95
  22. package/dist/runtime/universal/fs/universal-fs.runtime.js.map +1 -1
  23. package/dist/server/build.util.d.ts +38 -0
  24. package/dist/server/build.util.js +133 -0
  25. package/dist/server/build.util.js.map +1 -0
  26. package/dist/server/codegen.util.d.ts +3 -0
  27. package/dist/server/codegen.util.js +28 -10
  28. package/dist/server/codegen.util.js.map +1 -1
  29. package/dist/server/emroute.server.js +53 -29
  30. package/dist/server/emroute.server.js.map +1 -1
  31. package/dist/server/esbuild-manifest.plugin.js +6 -4
  32. package/dist/server/esbuild-manifest.plugin.js.map +1 -1
  33. package/dist/server/server-api.type.d.ts +6 -0
  34. package/dist/src/component/abstract.component.d.ts +5 -3
  35. package/dist/src/component/abstract.component.js.map +1 -1
  36. package/dist/src/element/component.element.js +5 -4
  37. package/dist/src/element/component.element.js.map +1 -1
  38. package/dist/src/renderer/spa/mod.d.ts +2 -3
  39. package/dist/src/renderer/spa/mod.js +2 -3
  40. package/dist/src/renderer/spa/mod.js.map +1 -1
  41. package/dist/src/renderer/spa/thin-client.d.ts +34 -0
  42. package/dist/src/renderer/spa/thin-client.js +138 -0
  43. package/dist/src/renderer/spa/thin-client.js.map +1 -0
  44. package/dist/src/renderer/ssr/html.renderer.d.ts +3 -3
  45. package/dist/src/renderer/ssr/html.renderer.js +6 -6
  46. package/dist/src/renderer/ssr/html.renderer.js.map +1 -1
  47. package/dist/src/renderer/ssr/md.renderer.d.ts +3 -3
  48. package/dist/src/renderer/ssr/md.renderer.js +12 -7
  49. package/dist/src/renderer/ssr/md.renderer.js.map +1 -1
  50. package/dist/src/renderer/ssr/ssr.renderer.d.ts +7 -6
  51. package/dist/src/renderer/ssr/ssr.renderer.js +42 -44
  52. package/dist/src/renderer/ssr/ssr.renderer.js.map +1 -1
  53. package/dist/src/route/route.core.d.ts +16 -6
  54. package/dist/src/route/route.core.js +44 -23
  55. package/dist/src/route/route.core.js.map +1 -1
  56. package/dist/src/type/route-tree.type.d.ts +2 -0
  57. package/dist/src/type/route.type.d.ts +6 -24
  58. package/dist/src/util/md.util.d.ts +8 -0
  59. package/dist/src/util/md.util.js +28 -0
  60. package/dist/src/util/md.util.js.map +1 -0
  61. package/dist/src/util/widget-resolve.util.js +6 -1
  62. package/dist/src/util/widget-resolve.util.js.map +1 -1
  63. package/dist/src/widget/breadcrumb.widget.d.ts +0 -1
  64. package/dist/src/widget/breadcrumb.widget.js +4 -15
  65. package/dist/src/widget/breadcrumb.widget.js.map +1 -1
  66. package/package.json +13 -2
  67. package/runtime/abstract.runtime.ts +9 -82
  68. package/runtime/bun/esbuild-runtime-loader.plugin.ts +2 -0
  69. package/runtime/bun/fs/bun-fs.runtime.ts +0 -109
  70. package/runtime/bun/sqlite/bun-sqlite.runtime.ts +1 -112
  71. package/runtime/fetch.runtime.ts +70 -0
  72. package/runtime/sitemap.generator.ts +37 -12
  73. package/runtime/universal/fs/universal-fs.runtime.ts +0 -109
  74. package/server/build.util.ts +168 -0
  75. package/server/codegen.util.ts +29 -11
  76. package/server/emroute.server.ts +50 -30
  77. package/server/esbuild-manifest.plugin.ts +5 -3
  78. package/server/server-api.type.ts +7 -0
  79. package/src/component/abstract.component.ts +5 -3
  80. package/src/element/component.element.ts +5 -4
  81. package/src/renderer/spa/mod.ts +2 -8
  82. package/src/renderer/spa/thin-client.ts +165 -0
  83. package/src/renderer/ssr/html.renderer.ts +6 -5
  84. package/src/renderer/ssr/md.renderer.ts +12 -6
  85. package/src/renderer/ssr/ssr.renderer.ts +54 -48
  86. package/src/route/route.core.ts +49 -28
  87. package/src/type/route-tree.type.ts +2 -0
  88. package/src/type/route.type.ts +7 -32
  89. package/src/util/md.util.ts +31 -0
  90. package/src/util/widget-resolve.util.ts +6 -1
  91. package/src/widget/breadcrumb.widget.ts +4 -16
  92. package/server/scanner.util.ts +0 -243
  93. package/src/renderer/spa/base.renderer.ts +0 -186
  94. package/src/renderer/spa/hash.renderer.ts +0 -238
  95. package/src/renderer/spa/html.renderer.ts +0 -399
  96. package/src/route/route.matcher.ts +0 -260
  97. package/src/web-doc/index.md +0 -15
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Sitemap Generator — Opt-in Submodule
3
3
  *
4
- * Generates sitemap.xml from a RoutesManifest. Pure function over manifest data,
4
+ * Generates sitemap.xml from a RouteNode tree. Pure function over tree data,
5
5
  * no filesystem access needed.
6
6
  *
7
7
  * Usage:
@@ -64,26 +64,47 @@ function serializeEntry(entry) {
64
64
  return lines.join('\n');
65
65
  }
66
66
  /**
67
- * Generate sitemap.xml content from a routes manifest.
67
+ * Collect page routes from a RouteNode tree as pattern strings.
68
+ * Skips redirect and error boundary nodes.
69
+ */
70
+ function collectPatterns(node, prefix, out) {
71
+ // This node has page files — it's a page route
72
+ if (node.files && !node.redirect) {
73
+ out.push(prefix || '/');
74
+ }
75
+ if (node.children) {
76
+ for (const [segment, child] of Object.entries(node.children)) {
77
+ collectPatterns(child, `${prefix}/${segment}`, out);
78
+ }
79
+ }
80
+ if (node.dynamic) {
81
+ collectPatterns(node.dynamic.child, `${prefix}/:${node.dynamic.param}`, out);
82
+ }
83
+ if (node.wildcard) {
84
+ collectPatterns(node.wildcard.child, `${prefix}/*${node.wildcard.param}`, out);
85
+ }
86
+ }
87
+ /**
88
+ * Generate sitemap.xml content from a route tree.
68
89
  *
69
90
  * Static routes (no :param) are included directly.
70
91
  * Dynamic routes are included only if an enumerator is provided.
71
92
  * All URLs point to /html/ prefixed paths for SSR HTML rendering.
72
93
  */
73
- export async function generateSitemap(manifest, options) {
94
+ export async function generateSitemap(routeTree, options) {
74
95
  const entries = [];
75
96
  const bp = options.basePath ?? '';
76
- // Filter to page routes only (exclude error, redirect)
77
- const pages = manifest.routes.filter((r) => r.type === 'page');
78
- for (const route of pages) {
79
- const routeOpts = resolveOptions(route.pattern, options);
80
- if (isDynamic(route.pattern)) {
97
+ const patterns = [];
98
+ collectPatterns(routeTree, '', patterns);
99
+ for (const pattern of patterns) {
100
+ const routeOpts = resolveOptions(pattern, options);
101
+ if (isDynamic(pattern)) {
81
102
  // Dynamic route — use enumerator if provided, skip otherwise
82
- const enumerator = options.enumerators?.[route.pattern];
103
+ const enumerator = options.enumerators?.[pattern];
83
104
  if (!enumerator)
84
105
  continue;
85
106
  const values = await enumerator();
86
- const paths = expandDynamic(route.pattern, values);
107
+ const paths = expandDynamic(pattern, values);
87
108
  for (const path of paths) {
88
109
  entries.push({
89
110
  loc: buildLoc(options.baseUrl, path, bp),
@@ -94,7 +115,7 @@ export async function generateSitemap(manifest, options) {
94
115
  else {
95
116
  // Static route — include directly
96
117
  entries.push({
97
- loc: buildLoc(options.baseUrl, route.pattern, bp),
118
+ loc: buildLoc(options.baseUrl, pattern, bp),
98
119
  ...routeOpts,
99
120
  });
100
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sitemap.generator.js","sourceRoot":"","sources":["../../runtime/sitemap.generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sitemap.generator.js","sourceRoot":"","sources":["../../runtime/sitemap.generator.ts"],"names":[],"mappings":"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"}
@@ -21,9 +21,4 @@ export declare class UniversalFsRuntime extends Runtime {
21
21
  private list;
22
22
  private write;
23
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
24
  }
@@ -7,12 +7,8 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
7
7
  return path;
8
8
  };
9
9
  import { readFile, writeFile, stat, readdir, mkdir } from 'node:fs/promises';
10
- import { createRequire } from 'node:module';
11
10
  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";
11
+ import { CONTENT_TYPES, ROUTES_MANIFEST_PATH, Runtime, WIDGETS_MANIFEST_PATH, } from "../../abstract.runtime.js";
16
12
  /**
17
13
  * Filesystem runtime using only `node:` APIs and esbuild. Works on Node,
18
14
  * Deno, and Bun without platform-specific dependencies.
@@ -24,9 +20,6 @@ import { generateMainTs } from "../../../server/codegen.util.js";
24
20
  export class UniversalFsRuntime extends Runtime {
25
21
  root;
26
22
  constructor(root, config = {}) {
27
- if (config.entryPoint && !config.bundlePaths) {
28
- config.bundlePaths = { emroute: '/emroute.js', app: '/app.js' };
29
- }
30
23
  super(config);
31
24
  const abs = resolve(root);
32
25
  this.root = abs.endsWith('/') ? abs.slice(0, -1) : abs;
@@ -121,92 +114,5 @@ export class UniversalFsRuntime extends Runtime {
121
114
  loadModule(path) {
122
115
  return import(__rewriteRelativeImportExtension(this.root + path));
123
116
  }
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
- resolveDir: this.root,
154
- });
155
- builds.push(esbuild.build({
156
- ...shared,
157
- entryPoints: [`${this.root}${this.config.entryPoint}`],
158
- outfile: `${this.root}${paths.app}`,
159
- external: [...EMROUTE_EXTERNALS],
160
- plugins: [manifestPlugin, runtimeLoader],
161
- }));
162
- }
163
- // Widgets bundle
164
- if (paths.widgets) {
165
- const widgetsTsPath = paths.widgets.replace('.js', '.ts');
166
- if ((await this.query(widgetsTsPath)).status !== 404) {
167
- builds.push(esbuild.build({
168
- ...shared,
169
- entryPoints: [`${this.root}${widgetsTsPath}`],
170
- outfile: `${this.root}${paths.widgets}`,
171
- external: [...EMROUTE_EXTERNALS],
172
- plugins: [runtimeLoader],
173
- }));
174
- }
175
- }
176
- const results = await Promise.all(builds);
177
- // Write all output files through the runtime
178
- for (const result of results) {
179
- for (const file of result.outputFiles) {
180
- const runtimePath = file.path.startsWith(this.root)
181
- ? file.path.slice(this.root.length)
182
- : '/' + file.path;
183
- await this.command(runtimePath, { body: file.contents });
184
- }
185
- }
186
- await this.writeShell(paths);
187
- await esbuild.stop();
188
- UniversalFsRuntime._esbuild = null;
189
- }
190
- // ── Transpile / esbuild ───────────────────────────────────────────────
191
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
192
- static _esbuild = null;
193
- static async esbuild() {
194
- if (!UniversalFsRuntime._esbuild) {
195
- const consumerRequire = createRequire(process.cwd() + '/');
196
- UniversalFsRuntime._esbuild = consumerRequire('esbuild');
197
- }
198
- return UniversalFsRuntime._esbuild;
199
- }
200
- static async transpile(source) {
201
- const esbuild = await UniversalFsRuntime.esbuild();
202
- const result = await esbuild.transform(source, { loader: 'ts' });
203
- return result.code;
204
- }
205
- static async stopBundler() {
206
- if (UniversalFsRuntime._esbuild) {
207
- await UniversalFsRuntime._esbuild.stop();
208
- UniversalFsRuntime._esbuild = null;
209
- }
210
- }
211
117
  }
212
118
  //# sourceMappingURL=universal-fs.runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"universal-fs.runtime.js","sourceRoot":"","sources":["../../../../runtime/universal/fs/universal-fs.runtime.ts"],"names":[],"mappings":"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"}
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,38 @@
1
+ /**
2
+ * Build Utilities
3
+ *
4
+ * Standalone client bundling — extracted from Runtime so that build is a
5
+ * separate concern from storage. Call `buildClientBundles()` before
6
+ * `createEmrouteServer()` to produce emroute.js + app.js.
7
+ *
8
+ * Requires esbuild as a devDependency in the consumer project.
9
+ */
10
+ import type { Runtime } from '../runtime/abstract.runtime.ts';
11
+ import type { SpaMode } from '../src/type/widget.type.ts';
12
+ export declare const EMROUTE_EXTERNALS: readonly ["@emkodev/emroute/spa", "@emkodev/emroute/overlay", "@emkodev/emroute", "@emkodev/emroute/server", "@emkodev/emroute/runtime/fetch"];
13
+ /** esbuild namespace for virtual `emroute:routes` / `emroute:widgets` modules. */
14
+ export declare const EMROUTE_VIRTUAL_NS = "emroute";
15
+ export interface BuildOptions {
16
+ /** Runtime instance to read manifests and source files from. */
17
+ runtime: Runtime;
18
+ /** Filesystem root for esbuild resolution (e.g. process.cwd() or the app directory). */
19
+ root: string;
20
+ /** SPA mode — skips bundling when 'none'. */
21
+ spa: SpaMode;
22
+ /** Consumer's SPA entry point (e.g. '/main.ts'). When absent, auto-generates one. */
23
+ entryPoint?: string;
24
+ /** Output paths for the bundles. */
25
+ bundlePaths?: {
26
+ emroute: string;
27
+ app: string;
28
+ };
29
+ }
30
+ /**
31
+ * Build client bundles and write them into the runtime.
32
+ *
33
+ * Produces:
34
+ * - emroute.js — pre-built from dist/ (no esbuild needed for this)
35
+ * - app.js — consumer entry point with routeTree, FetchRuntime, createEmrouteApp
36
+ * - index.html — shell with import map + script tags (if not already present)
37
+ */
38
+ export declare function buildClientBundles(options: BuildOptions): Promise<void>;
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Build Utilities
3
+ *
4
+ * Standalone client bundling — extracted from Runtime so that build is a
5
+ * separate concern from storage. Call `buildClientBundles()` before
6
+ * `createEmrouteServer()` to produce emroute.js + app.js.
7
+ *
8
+ * Requires esbuild as a devDependency in the consumer project.
9
+ */
10
+ import { readFile } from 'node:fs/promises';
11
+ import { createRequire } from 'node:module';
12
+ import { resolve } from 'node:path';
13
+ import { DEFAULT_ROUTES_DIR, DEFAULT_WIDGETS_DIR } from "../runtime/abstract.runtime.js";
14
+ import { createManifestPlugin } from "./esbuild-manifest.plugin.js";
15
+ import { createRuntimeLoaderPlugin } from "../runtime/bun/esbuild-runtime-loader.plugin.js";
16
+ import { generateMainTs } from "./codegen.util.js";
17
+ export const EMROUTE_EXTERNALS = [
18
+ '@emkodev/emroute/spa',
19
+ '@emkodev/emroute/overlay',
20
+ '@emkodev/emroute',
21
+ '@emkodev/emroute/server',
22
+ '@emkodev/emroute/runtime/fetch',
23
+ ];
24
+ /** esbuild namespace for virtual `emroute:routes` / `emroute:widgets` modules. */
25
+ export const EMROUTE_VIRTUAL_NS = 'emroute';
26
+ const DEFAULT_BUNDLE_PATHS = { emroute: '/emroute.js', app: '/app.js' };
27
+ /**
28
+ * Build client bundles and write them into the runtime.
29
+ *
30
+ * Produces:
31
+ * - emroute.js — pre-built from dist/ (no esbuild needed for this)
32
+ * - app.js — consumer entry point with routeTree, FetchRuntime, createEmrouteApp
33
+ * - index.html — shell with import map + script tags (if not already present)
34
+ */
35
+ export async function buildClientBundles(options) {
36
+ const { runtime, root, spa, entryPoint } = options;
37
+ if (spa === 'none')
38
+ return;
39
+ const paths = options.bundlePaths ?? DEFAULT_BUNDLE_PATHS;
40
+ // Copy pre-built emroute.js from the package dist/
41
+ const consumerRequire = createRequire(root + '/');
42
+ const emrouteJsPath = resolvePrebuiltBundle(consumerRequire);
43
+ const emrouteJs = await readFile(emrouteJsPath);
44
+ await runtime.command(paths.emroute, { body: emrouteJs });
45
+ // App bundle — generate main.ts if absent, virtual plugin resolves manifests
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ const esbuild = await loadEsbuild();
48
+ const ep = entryPoint ?? '/main.ts';
49
+ if ((await runtime.query(ep)).status === 404) {
50
+ const hasRoutes = (await runtime.query((runtime.config.routesDir ?? DEFAULT_ROUTES_DIR) + '/')).status !== 404;
51
+ const hasWidgets = (await runtime.query((runtime.config.widgetsDir ?? DEFAULT_WIDGETS_DIR) + '/')).status !== 404;
52
+ const code = generateMainTs(spa, hasRoutes, hasWidgets, '@emkodev/emroute');
53
+ await runtime.command(ep, { body: code });
54
+ }
55
+ const manifestPlugin = createManifestPlugin({ runtime, resolveDir: root });
56
+ const runtimeLoader = createRuntimeLoaderPlugin({ runtime, root });
57
+ const result = await esbuild.build({
58
+ bundle: true,
59
+ write: false,
60
+ format: 'esm',
61
+ platform: 'browser',
62
+ entryPoints: [`${root}${ep}`],
63
+ outfile: `${root}${paths.app}`,
64
+ external: [...EMROUTE_EXTERNALS],
65
+ plugins: [manifestPlugin, runtimeLoader],
66
+ });
67
+ for (const file of result.outputFiles) {
68
+ const runtimePath = file.path.startsWith(root)
69
+ ? file.path.slice(root.length)
70
+ : '/' + file.path;
71
+ await runtime.command(runtimePath, { body: file.contents });
72
+ }
73
+ // Write shell (index.html) if not already present
74
+ await writeShell(runtime, paths, ep);
75
+ await esbuild.stop();
76
+ }
77
+ /**
78
+ * Resolve the pre-built dist/emroute.js from the consumer's node_modules.
79
+ * Falls back to the local dist/ when running from the source repo.
80
+ */
81
+ function resolvePrebuiltBundle(require) {
82
+ try {
83
+ const spaEntry = require.resolve('@emkodev/emroute/spa');
84
+ // Compiled: .../dist/src/renderer/spa/mod.js → .../dist/emroute.js
85
+ const distMatch = spaEntry.match(/^(.+\/dist\/)src\/renderer\/spa\/mod\.js$/);
86
+ if (distMatch)
87
+ return distMatch[1] + 'emroute.js';
88
+ // Source (Bun): .../src/renderer/spa/mod.ts → .../dist/emroute.js
89
+ const srcMatch = spaEntry.match(/^(.+\/)src\/renderer\/spa\/mod\.ts$/);
90
+ if (srcMatch)
91
+ return srcMatch[1] + 'dist/emroute.js';
92
+ }
93
+ catch { /* not installed as dependency */ }
94
+ // Last resort
95
+ return resolve(process.cwd(), 'dist/emroute.js');
96
+ }
97
+ // ── Shell generation ──────────────────────────────────────────────────
98
+ async function writeShell(runtime, paths, entryPoint) {
99
+ if ((await runtime.query('/index.html')).status !== 404)
100
+ return;
101
+ const imports = {};
102
+ for (const pkg of EMROUTE_EXTERNALS) {
103
+ imports[pkg] = paths.emroute;
104
+ }
105
+ const importMap = JSON.stringify({ imports }, null, 2);
106
+ const scripts = [
107
+ `<script type="importmap">\n${importMap}\n </script>`,
108
+ ];
109
+ if (entryPoint) {
110
+ scripts.push(`<script type="module" src="${paths.app}"></script>`);
111
+ }
112
+ const html = `<!DOCTYPE html>
113
+ <html>
114
+ <head>
115
+ <meta charset="utf-8">
116
+ <meta name="viewport" content="width=device-width, initial-scale=1">
117
+ <title>emroute</title>
118
+ <style>@view-transition { navigation: auto; } router-slot { display: contents; }</style>
119
+ </head>
120
+ <body>
121
+ <router-slot></router-slot>
122
+ ${scripts.join('\n ')}
123
+ </body>
124
+ </html>`;
125
+ await runtime.command('/index.html', { body: html });
126
+ }
127
+ // ── esbuild loader ────────────────────────────────────────────────────
128
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
129
+ async function loadEsbuild() {
130
+ const consumerRequire = createRequire(process.cwd() + '/');
131
+ return consumerRequire('esbuild');
132
+ }
133
+ //# sourceMappingURL=build.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.util.js","sourceRoot":"","sources":["../../server/build.util.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,9 @@ import type { SpaMode } from '../src/type/widget.type.ts';
10
10
  /**
11
11
  * Generate a main.ts entry point for SPA bootstrapping.
12
12
  *
13
+ * For `root`/`only` modes: creates an EmrouteServer with FetchRuntime
14
+ * in the browser and wires it to Navigation API via `createEmrouteApp`.
15
+ *
13
16
  * Imports route tree and widget manifests from virtual `emroute:` specifiers
14
17
  * that the esbuild manifest plugin resolves at bundle time.
15
18
  */
@@ -8,6 +8,9 @@
8
8
  /**
9
9
  * Generate a main.ts entry point for SPA bootstrapping.
10
10
  *
11
+ * For `root`/`only` modes: creates an EmrouteServer with FetchRuntime
12
+ * in the browser and wires it to Navigation API via `createEmrouteApp`.
13
+ *
11
14
  * Imports route tree and widget manifests from virtual `emroute:` specifiers
12
15
  * that the esbuild manifest plugin resolves at bundle time.
13
16
  */
@@ -15,20 +18,21 @@ export function generateMainTs(spa, hasRoutes, hasWidgets, importPath, basePath)
15
18
  const imports = [];
16
19
  const body = [];
17
20
  const spaImport = `${importPath}/spa`;
18
- if (hasRoutes) {
19
- imports.push(`import { routeTree, moduleLoaders } from 'emroute:routes';`);
20
- }
21
21
  if (hasWidgets) {
22
- imports.push(`import { ComponentElement } from '${spaImport}';`);
22
+ imports.push(`import { ComponentElement, WidgetRegistry } from '${spaImport}';`);
23
23
  imports.push(`import { widgetsManifest } from 'emroute:widgets';`);
24
+ body.push('const widgets = new WidgetRegistry();');
24
25
  body.push('for (const entry of widgetsManifest.widgets) {');
25
26
  body.push(' const mod = await widgetsManifest.moduleLoaders![entry.modulePath]() as Record<string, unknown>;');
26
27
  body.push(' for (const exp of Object.values(mod)) {');
27
28
  body.push(" if (exp && typeof exp === 'object' && 'getData' in exp) {");
29
+ body.push(' widgets.add(exp as any);');
28
30
  body.push(' ComponentElement.register(exp as any, entry.files);');
29
31
  body.push(' break;');
30
32
  body.push(' }');
31
33
  body.push(" if (typeof exp === 'function' && exp.prototype?.getData) {");
34
+ body.push(' const instance = new (exp as new () => any)();');
35
+ body.push(' widgets.add(instance);');
32
36
  body.push(' ComponentElement.registerClass(exp as new () => any, entry.name, entry.files);');
33
37
  body.push(' break;');
34
38
  body.push(' }');
@@ -36,12 +40,26 @@ export function generateMainTs(spa, hasRoutes, hasWidgets, importPath, basePath)
36
40
  body.push('}');
37
41
  }
38
42
  if ((spa === 'root' || spa === 'only') && hasRoutes) {
39
- imports.push(`import { RouteTrie } from '${importPath}';`);
40
- imports.push(`import { createSpaHtmlRouter } from '${spaImport}';`);
41
- body.push('const resolver = new RouteTrie(routeTree);');
42
- const bpOpt = basePath ? `basePath: { html: '${basePath.html}', md: '${basePath.md}' }` : '';
43
- const optsInner = [bpOpt, 'moduleLoaders'].filter(Boolean).join(', ');
44
- body.push(`await createSpaHtmlRouter(resolver, { ${optsInner} });`);
43
+ imports.push(`import { routeTree, moduleLoaders } from 'emroute:routes';`);
44
+ imports.push(`import { createEmrouteServer } from '${importPath}/server';`);
45
+ imports.push(`import { FetchRuntime } from '${importPath}/runtime/fetch';`);
46
+ imports.push(`import { createEmrouteApp } from '${spaImport}';`);
47
+ body.push('const runtime = new FetchRuntime(location.origin);');
48
+ // Merge route + widget module loaders so the browser never calls runtime.loadModule()
49
+ const loadersExpr = hasWidgets
50
+ ? '{ ...moduleLoaders, ...widgetsManifest.moduleLoaders }'
51
+ : 'moduleLoaders';
52
+ const configParts = ['routeTree', `moduleLoaders: ${loadersExpr}`];
53
+ if (hasWidgets)
54
+ configParts.push('widgets');
55
+ if (basePath) {
56
+ configParts.push(`basePath: { html: '${basePath.html}', md: '${basePath.md}', app: '${basePath.app}' }`);
57
+ }
58
+ body.push(`const server = await createEmrouteServer({ ${configParts.join(', ')} }, runtime);`);
59
+ const appOpts = basePath
60
+ ? `{ basePath: { html: '${basePath.html}', md: '${basePath.md}', app: '${basePath.app}' } }`
61
+ : '';
62
+ body.push(`await createEmrouteApp(server${appOpts ? ', ' + appOpts : ''});`);
45
63
  }
46
64
  return `/** Auto-generated entry point — do not edit. */\n${imports.join('\n')}\n\n${body.join('\n')}\n`;
47
65
  }
@@ -1 +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,4DAA4D,CAAC,CAAC;IAC7E,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,8BAA8B,UAAU,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,wCAAwC,SAAS,IAAI,CAAC,CAAC;QAEpE,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAExD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,sBAAsB,QAAQ,CAAC,IAAI,WAAW,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,yCAAyC,SAAS,MAAM,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,qDAAqD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAC5E,IAAI,CAAC,IAAI,CAAC,IAAI,CAChB,IAAI,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"codegen.util.js","sourceRoot":"","sources":["../../server/codegen.util.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;;;;;;GAQG;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,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,qDAAqD,SAAS,IAAI,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACnD,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,gCAAgC,CAAC,CAAC;QAC5C,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,CAAC,sDAAsD,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC1C,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,4DAA4D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,wCAAwC,UAAU,WAAW,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,iCAAiC,UAAU,kBAAkB,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,qCAAqC,SAAS,IAAI,CAAC,CAAC;QAEjE,IAAI,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAEhE,sFAAsF;QACtF,MAAM,WAAW,GAAG,UAAU;YAC5B,CAAC,CAAC,wDAAwD;YAC1D,CAAC,CAAC,eAAe,CAAC;QAEpB,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,kBAAkB,WAAW,EAAE,CAAC,CAAC;QACnE,IAAI,UAAU;YAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACb,WAAW,CAAC,IAAI,CAAC,sBAAsB,QAAQ,CAAC,IAAI,WAAW,QAAQ,CAAC,EAAE,YAAY,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC;QAC3G,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,8CAA8C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE/F,MAAM,OAAO,GAAG,QAAQ;YACtB,CAAC,CAAC,wBAAwB,QAAQ,CAAC,IAAI,WAAW,QAAQ,CAAC,EAAE,YAAY,QAAQ,CAAC,GAAG,OAAO;YAC5F,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,CAAC,IAAI,CAAC,gCAAgC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,qDAAqD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAC5E,IAAI,CAAC,IAAI,CAAC,IAAI,CAChB,IAAI,CAAC;AACP,CAAC"}