@evjs/build-tools 0.0.18 → 0.0.20
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.
- package/esm/html.d.ts +5 -5
- package/esm/html.d.ts.map +1 -1
- package/esm/html.js +4 -4
- package/esm/html.js.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/esm/routes.d.ts +26 -0
- package/esm/routes.d.ts.map +1 -1
- package/esm/routes.js +115 -5
- package/esm/routes.js.map +1 -1
- package/package.json +2 -2
package/esm/html.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type Document } from "domparser-rs";
|
|
2
2
|
/**
|
|
3
3
|
* A single asset descriptor — either a plain filename string or an object
|
|
4
4
|
* with a `url` and arbitrary HTML attributes.
|
|
@@ -24,8 +24,8 @@ export interface GenerateHtmlOptions {
|
|
|
24
24
|
js: HtmlAsset[];
|
|
25
25
|
/** CSS assets to inject (from ClientManifest.assets.css). */
|
|
26
26
|
css: HtmlAsset[];
|
|
27
|
-
/** Optional
|
|
28
|
-
|
|
27
|
+
/** Optional prefix for asset URLs (e.g. for CDN deploys). Default: "/". */
|
|
28
|
+
assetPrefix?: string;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
31
|
* Parse the user's HTML template and inject bundled asset tags.
|
|
@@ -33,7 +33,7 @@ export interface GenerateHtmlOptions {
|
|
|
33
33
|
* - CSS `<link>` tags are appended to `<head>`.
|
|
34
34
|
* - JS `<script>` tags are appended to `<body>` (with `defer`).
|
|
35
35
|
*
|
|
36
|
-
* Returns the parsed DOM document. Call `doc.
|
|
36
|
+
* Returns the parsed DOM document. Call `doc.toString()` to serialize.
|
|
37
37
|
*/
|
|
38
|
-
export declare function generateHtml(options: GenerateHtmlOptions):
|
|
38
|
+
export declare function generateHtml(options: GenerateHtmlOptions): Document;
|
|
39
39
|
//# sourceMappingURL=html.d.ts.map
|
package/esm/html.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;CAAE,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,EAAE,EAAE,SAAS,EAAE,CAAC;IAChB,6DAA6D;IAC7D,GAAG,EAAE,SAAS,EAAE,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;CAAE,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,EAAE,EAAE,SAAS,EAAE,CAAC;IAChB,6DAA6D;IAC7D,GAAG,EAAE,SAAS,EAAE,CAAC;IACjB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA4BD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,QAAQ,CA4CnE"}
|
package/esm/html.js
CHANGED
|
@@ -27,10 +27,10 @@ function normalizeAsset(asset) {
|
|
|
27
27
|
* - CSS `<link>` tags are appended to `<head>`.
|
|
28
28
|
* - JS `<script>` tags are appended to `<body>` (with `defer`).
|
|
29
29
|
*
|
|
30
|
-
* Returns the parsed DOM document. Call `doc.
|
|
30
|
+
* Returns the parsed DOM document. Call `doc.toString()` to serialize.
|
|
31
31
|
*/
|
|
32
32
|
export function generateHtml(options) {
|
|
33
|
-
const { template, js, css,
|
|
33
|
+
const { template, js, css, assetPrefix = "/" } = options;
|
|
34
34
|
const templateContent = fs.readFileSync(template, "utf-8");
|
|
35
35
|
const doc = parser.parseFromString(templateContent, "text/html");
|
|
36
36
|
const head = doc.querySelector("head");
|
|
@@ -44,13 +44,13 @@ export function generateHtml(options) {
|
|
|
44
44
|
// Inject CSS <link> tags into <head>
|
|
45
45
|
for (const cssAsset of css) {
|
|
46
46
|
const { url, attrs } = normalizeAsset(cssAsset);
|
|
47
|
-
const href = `${
|
|
47
|
+
const href = `${assetPrefix}${url}`;
|
|
48
48
|
head.insertAdjacentHTML("beforeend", `<link rel="stylesheet" href="${href}"${renderAttrs(attrs)}>`);
|
|
49
49
|
}
|
|
50
50
|
// Inject JS <script defer> tags into <body>
|
|
51
51
|
for (const jsAsset of js) {
|
|
52
52
|
const { url, attrs } = normalizeAsset(jsAsset);
|
|
53
|
-
const src = `${
|
|
53
|
+
const src = `${assetPrefix}${url}`;
|
|
54
54
|
// defer is default; user can override via attrs (e.g. { defer: false, async: true })
|
|
55
55
|
const hasLoadStrategy = "async" in attrs || "defer" in attrs;
|
|
56
56
|
const defaultAttrs = hasLoadStrategy ? "" : " defer";
|
package/esm/html.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,SAAS,EAAiB,MAAM,cAAc,CAAC;AA+BxD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;AAE/B,oEAAoE;AACpE,SAAS,WAAW,CAAC,KAAuC;IAC1D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,8CAA8C;AAC9C,SAAS,cAAc,CAAC,KAAgB;IAItC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;AACtD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"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"}
|
package/esm/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export { generateServerEntry } from "./entry.js";
|
|
|
5
5
|
export type { GenerateHtmlOptions, HtmlAsset } from "./html.js";
|
|
6
6
|
export { generateHtml } from "./html.js";
|
|
7
7
|
export type { ExtractedRoute } from "./routes.js";
|
|
8
|
-
export { extractRoutes } from "./routes.js";
|
|
8
|
+
export { extractRoutes, resolveRoutes } from "./routes.js";
|
|
9
9
|
export type { TransformResult } from "./transforms/index.js";
|
|
10
10
|
export { transformServerFile } from "./transforms/index.js";
|
|
11
11
|
export type { ServerEntryConfig, TransformOptions } from "./types.js";
|
package/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EACL,eAAe,EACf,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC"}
|
package/esm/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { generateServerEntry } from "./entry.js";
|
|
5
5
|
export { generateHtml } from "./html.js";
|
|
6
|
-
export { extractRoutes } from "./routes.js";
|
|
6
|
+
export { extractRoutes, resolveRoutes } from "./routes.js";
|
|
7
7
|
export { transformServerFile } from "./transforms/index.js";
|
|
8
8
|
export { detectUseServer, hashString, makeFnId, makeModuleId, parseModuleRef, } from "./utils.js";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EACL,eAAe,EACf,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC"}
|
package/esm/routes.d.ts
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
export interface ExtractedRoute {
|
|
3
3
|
/** Route path (e.g. "/", "/posts/$postId"). */
|
|
4
4
|
path: string;
|
|
5
|
+
/** Variable name of the parent route (e.g. "rootRoute", "postsRoute"). */
|
|
6
|
+
parentName?: string;
|
|
7
|
+
/** Variable name this route is assigned to (e.g. "homeRoute"). */
|
|
8
|
+
varName?: string;
|
|
5
9
|
}
|
|
6
10
|
/**
|
|
7
11
|
* Extract route metadata from source code by scanning for createRoute() calls.
|
|
@@ -16,4 +20,26 @@ export interface ExtractedRoute {
|
|
|
16
20
|
* ```
|
|
17
21
|
*/
|
|
18
22
|
export declare function extractRoutes(source: string): ExtractedRoute[];
|
|
23
|
+
/**
|
|
24
|
+
* Resolve a flat list of extracted routes into de-duplicated full paths.
|
|
25
|
+
*
|
|
26
|
+
* Builds the parent-child hierarchy using `varName` / `parentName` and
|
|
27
|
+
* walks the tree to construct full URL paths.
|
|
28
|
+
*
|
|
29
|
+
* Index routes (child `path: "/"` under a non-root parent) are excluded
|
|
30
|
+
* since they resolve to the same URL as their parent route.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* resolveRoutes([
|
|
35
|
+
* { path: "/posts", varName: "postsRoute", parentName: "rootRoute" },
|
|
36
|
+
* { path: "/", varName: "postsIndexRoute", parentName: "postsRoute" },
|
|
37
|
+
* { path: "$postId", varName: "postDetailRoute", parentName: "postsRoute" },
|
|
38
|
+
* ])
|
|
39
|
+
* // => [{ path: "/posts" }, { path: "/posts/$postId" }]
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveRoutes(routes: ExtractedRoute[]): Array<{
|
|
43
|
+
path: string;
|
|
44
|
+
}>;
|
|
19
45
|
//# sourceMappingURL=routes.d.ts.map
|
package/esm/routes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AASA,0DAA0D;AAC1D,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AASA,0DAA0D;AAC1D,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,CAmB9D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,EAAE,GACvB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAkDzB"}
|
package/esm/routes.js
CHANGED
|
@@ -29,6 +29,78 @@ export function extractRoutes(source) {
|
|
|
29
29
|
}
|
|
30
30
|
return routes;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Resolve a flat list of extracted routes into de-duplicated full paths.
|
|
34
|
+
*
|
|
35
|
+
* Builds the parent-child hierarchy using `varName` / `parentName` and
|
|
36
|
+
* walks the tree to construct full URL paths.
|
|
37
|
+
*
|
|
38
|
+
* Index routes (child `path: "/"` under a non-root parent) are excluded
|
|
39
|
+
* since they resolve to the same URL as their parent route.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* resolveRoutes([
|
|
44
|
+
* { path: "/posts", varName: "postsRoute", parentName: "rootRoute" },
|
|
45
|
+
* { path: "/", varName: "postsIndexRoute", parentName: "postsRoute" },
|
|
46
|
+
* { path: "$postId", varName: "postDetailRoute", parentName: "postsRoute" },
|
|
47
|
+
* ])
|
|
48
|
+
* // => [{ path: "/posts" }, { path: "/posts/$postId" }]
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function resolveRoutes(routes) {
|
|
52
|
+
// Build a lookup: varName → ExtractedRoute
|
|
53
|
+
const byName = new Map();
|
|
54
|
+
for (const r of routes) {
|
|
55
|
+
if (r.varName) {
|
|
56
|
+
byName.set(r.varName, r);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Walk up the parent chain to build the full path prefix for a route.
|
|
61
|
+
* Returns the full resolved path of the given route variable.
|
|
62
|
+
*/
|
|
63
|
+
function resolveParentPath(route) {
|
|
64
|
+
if (!route.parentName)
|
|
65
|
+
return route.path;
|
|
66
|
+
const parent = byName.get(route.parentName);
|
|
67
|
+
if (!parent) {
|
|
68
|
+
// Parent not in the extracted set (e.g. rootRoute from createRootRoute)
|
|
69
|
+
// — treat as top-level, no prefix.
|
|
70
|
+
return route.path;
|
|
71
|
+
}
|
|
72
|
+
const parentPath = resolveParentPath(parent);
|
|
73
|
+
return joinPaths(parentPath, route.path);
|
|
74
|
+
}
|
|
75
|
+
const seen = new Set();
|
|
76
|
+
const result = [];
|
|
77
|
+
for (const r of routes) {
|
|
78
|
+
const fullPath = resolveParentPath(r);
|
|
79
|
+
// Skip index routes that resolve to the same path as their parent.
|
|
80
|
+
// An index route has path "/" and a parent that is not the root.
|
|
81
|
+
if (r.path === "/" && r.parentName) {
|
|
82
|
+
const parent = byName.get(r.parentName);
|
|
83
|
+
if (parent) {
|
|
84
|
+
// This is a non-root index route — it duplicates the parent path.
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (!seen.has(fullPath)) {
|
|
89
|
+
seen.add(fullPath);
|
|
90
|
+
result.push({ path: fullPath });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
/** Join two path segments, normalizing double slashes. */
|
|
96
|
+
function joinPaths(parent, child) {
|
|
97
|
+
if (child === "/")
|
|
98
|
+
return parent;
|
|
99
|
+
if (child.startsWith("/"))
|
|
100
|
+
return child;
|
|
101
|
+
const base = parent.endsWith("/") ? parent : `${parent}/`;
|
|
102
|
+
return base + child;
|
|
103
|
+
}
|
|
32
104
|
/** Walk a top-level module item looking for createRoute calls. */
|
|
33
105
|
function collectFromItem(item, routes) {
|
|
34
106
|
// export const fooRoute = createRoute({ ... })
|
|
@@ -37,7 +109,8 @@ function collectFromItem(item, routes) {
|
|
|
37
109
|
if (decl.type === "VariableDeclaration") {
|
|
38
110
|
for (const d of decl.declarations) {
|
|
39
111
|
if (d.init) {
|
|
40
|
-
|
|
112
|
+
const varName = d.id.type === "Identifier" ? d.id.value : undefined;
|
|
113
|
+
tryExtractFromExpr(d.init, routes, varName);
|
|
41
114
|
}
|
|
42
115
|
}
|
|
43
116
|
}
|
|
@@ -47,13 +120,14 @@ function collectFromItem(item, routes) {
|
|
|
47
120
|
if (item.type === "VariableDeclaration") {
|
|
48
121
|
for (const d of item.declarations) {
|
|
49
122
|
if (d.init) {
|
|
50
|
-
|
|
123
|
+
const varName = d.id.type === "Identifier" ? d.id.value : undefined;
|
|
124
|
+
tryExtractFromExpr(d.init, routes, varName);
|
|
51
125
|
}
|
|
52
126
|
}
|
|
53
127
|
}
|
|
54
128
|
}
|
|
55
129
|
/** If the expression is a createRoute() call, extract route metadata. */
|
|
56
|
-
function tryExtractFromExpr(expr, routes) {
|
|
130
|
+
function tryExtractFromExpr(expr, routes, varName) {
|
|
57
131
|
if (!isCreateRouteCall(expr))
|
|
58
132
|
return;
|
|
59
133
|
const call = expr;
|
|
@@ -62,15 +136,51 @@ function tryExtractFromExpr(expr, routes) {
|
|
|
62
136
|
const arg = call.arguments[0].expression;
|
|
63
137
|
if (arg.type !== "ObjectExpression")
|
|
64
138
|
return;
|
|
139
|
+
let path;
|
|
140
|
+
let parentName;
|
|
65
141
|
for (const prop of arg.properties) {
|
|
66
142
|
if (prop.type !== "KeyValueProperty")
|
|
67
143
|
continue;
|
|
68
144
|
const key = getPropertyName(prop);
|
|
69
145
|
if (key === "path" && prop.value.type === "StringLiteral") {
|
|
70
|
-
|
|
71
|
-
|
|
146
|
+
path = prop.value.value;
|
|
147
|
+
}
|
|
148
|
+
if (key === "getParentRoute") {
|
|
149
|
+
parentName = extractParentName(prop.value);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (path !== undefined) {
|
|
153
|
+
const route = { path };
|
|
154
|
+
if (parentName)
|
|
155
|
+
route.parentName = parentName;
|
|
156
|
+
if (varName)
|
|
157
|
+
route.varName = varName;
|
|
158
|
+
routes.push(route);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Extract the parent route variable name from a `getParentRoute` value.
|
|
163
|
+
*
|
|
164
|
+
* Handles arrow functions like:
|
|
165
|
+
* - `() => rootRoute` (expression body)
|
|
166
|
+
* - `() => { return rootRoute; }` (block body — not common but safe)
|
|
167
|
+
*/
|
|
168
|
+
function extractParentName(expr) {
|
|
169
|
+
if (expr.type !== "ArrowFunctionExpression")
|
|
170
|
+
return undefined;
|
|
171
|
+
// () => rootRoute (expression body)
|
|
172
|
+
if (expr.body.type === "Identifier") {
|
|
173
|
+
return expr.body.value;
|
|
174
|
+
}
|
|
175
|
+
// () => { return rootRoute; }
|
|
176
|
+
if (expr.body.type === "BlockStatement" && expr.body.stmts.length === 1) {
|
|
177
|
+
const stmt = expr.body.stmts[0];
|
|
178
|
+
if (stmt.type === "ReturnStatement" &&
|
|
179
|
+
stmt.argument?.type === "Identifier") {
|
|
180
|
+
return stmt.argument.value;
|
|
72
181
|
}
|
|
73
182
|
}
|
|
183
|
+
return undefined;
|
|
74
184
|
}
|
|
75
185
|
function isCreateRouteCall(expr) {
|
|
76
186
|
if (expr.type !== "CallExpression")
|
package/esm/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evjs/build-tools",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.20",
|
|
4
4
|
"description": "Bundler-agnostic build utilities for the ev framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"license": "MIT",
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@swc/core": "^1.15.21",
|
|
35
|
-
"domparser-rs": "^0.0
|
|
35
|
+
"domparser-rs": "^0.1.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@swc/types": "^0.1.25",
|