@screenbook/cli 1.6.1 → 1.7.0

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/dist/index.mjs CHANGED
@@ -3042,25 +3042,26 @@ function parseVueRouterConfig(filePath, preloadedContent) {
3042
3042
  throw new Error(`Failed to parse routes file "${absolutePath}": ${message}`);
3043
3043
  }
3044
3044
  const routes = [];
3045
+ const importMap = buildImportMap(ast.program.body, routesFileDir);
3045
3046
  for (const node of ast.program.body) {
3046
3047
  if (node.type === "ExportNamedDeclaration" && node.declaration?.type === "VariableDeclaration") {
3047
3048
  for (const decl of node.declaration.declarations) if (decl.id.type === "Identifier" && decl.id.name === "routes" && decl.init?.type === "ArrayExpression") {
3048
- const parsed = parseRoutesArray(decl.init, routesFileDir, warnings);
3049
+ const parsed = parseRoutesArray(decl.init, routesFileDir, warnings, importMap);
3049
3050
  routes.push(...parsed);
3050
3051
  }
3051
3052
  }
3052
3053
  if (node.type === "VariableDeclaration") {
3053
3054
  for (const decl of node.declarations) if (decl.id.type === "Identifier" && decl.id.name === "routes" && decl.init?.type === "ArrayExpression") {
3054
- const parsed = parseRoutesArray(decl.init, routesFileDir, warnings);
3055
+ const parsed = parseRoutesArray(decl.init, routesFileDir, warnings, importMap);
3055
3056
  routes.push(...parsed);
3056
3057
  }
3057
3058
  }
3058
3059
  if (node.type === "ExportDefaultDeclaration" && node.declaration.type === "ArrayExpression") {
3059
- const parsed = parseRoutesArray(node.declaration, routesFileDir, warnings);
3060
+ const parsed = parseRoutesArray(node.declaration, routesFileDir, warnings, importMap);
3060
3061
  routes.push(...parsed);
3061
3062
  }
3062
3063
  if (node.type === "ExportDefaultDeclaration" && node.declaration.type === "TSSatisfiesExpression" && node.declaration.expression.type === "ArrayExpression") {
3063
- const parsed = parseRoutesArray(node.declaration.expression, routesFileDir, warnings);
3064
+ const parsed = parseRoutesArray(node.declaration.expression, routesFileDir, warnings, importMap);
3064
3065
  routes.push(...parsed);
3065
3066
  }
3066
3067
  }
@@ -3071,9 +3072,25 @@ function parseVueRouterConfig(filePath, preloadedContent) {
3071
3072
  };
3072
3073
  }
3073
3074
  /**
3075
+ * Build a map of imported identifiers to their file paths
3076
+ */
3077
+ function buildImportMap(body, baseDir) {
3078
+ const importMap = /* @__PURE__ */ new Map();
3079
+ for (const node of body) {
3080
+ if (node.type !== "ImportDeclaration") continue;
3081
+ const source = node.source.value;
3082
+ if (typeof source !== "string") continue;
3083
+ const resolvedPath = resolveImportPath(source, baseDir);
3084
+ if (!resolvedPath) continue;
3085
+ for (const specifier of node.specifiers) if (specifier.type === "ImportDefaultSpecifier") importMap.set(specifier.local.name, resolvedPath);
3086
+ else if (specifier.type === "ImportSpecifier") importMap.set(specifier.local.name, resolvedPath);
3087
+ }
3088
+ return importMap;
3089
+ }
3090
+ /**
3074
3091
  * Parse an array expression containing route objects
3075
3092
  */
3076
- function parseRoutesArray(arrayNode, baseDir, warnings) {
3093
+ function parseRoutesArray(arrayNode, baseDir, warnings, importMap) {
3077
3094
  const routes = [];
3078
3095
  for (const element of arrayNode.elements) {
3079
3096
  if (!element) continue;
@@ -3083,7 +3100,7 @@ function parseRoutesArray(arrayNode, baseDir, warnings) {
3083
3100
  continue;
3084
3101
  }
3085
3102
  if (element.type === "ObjectExpression") {
3086
- const route = parseRouteObject(element, baseDir, warnings);
3103
+ const route = parseRouteObject(element, baseDir, warnings, importMap);
3087
3104
  if (route) routes.push(route);
3088
3105
  }
3089
3106
  }
@@ -3092,14 +3109,18 @@ function parseRoutesArray(arrayNode, baseDir, warnings) {
3092
3109
  /**
3093
3110
  * Parse a single route object expression
3094
3111
  */
3095
- function parseRouteObject(objectNode, baseDir, warnings) {
3096
- const route = { path: "" };
3112
+ function parseRouteObject(objectNode, baseDir, warnings, importMap) {
3113
+ const route = {};
3114
+ let hasPath = false;
3097
3115
  for (const prop of objectNode.properties) {
3098
3116
  if (prop.type !== "ObjectProperty") continue;
3099
3117
  if (prop.key.type !== "Identifier") continue;
3100
3118
  switch (prop.key.name) {
3101
3119
  case "path":
3102
- if (prop.value.type === "StringLiteral") route.path = prop.value.value;
3120
+ if (prop.value.type === "StringLiteral") {
3121
+ route.path = prop.value.value;
3122
+ hasPath = true;
3123
+ }
3103
3124
  break;
3104
3125
  case "name":
3105
3126
  if (prop.value.type === "StringLiteral") route.name = prop.value.value;
@@ -3108,21 +3129,21 @@ function parseRouteObject(objectNode, baseDir, warnings) {
3108
3129
  if (prop.value.type === "StringLiteral") route.redirect = prop.value.value;
3109
3130
  break;
3110
3131
  case "component":
3111
- route.component = extractComponentPath(prop.value, baseDir);
3132
+ route.component = extractComponentPath(prop.value, baseDir, importMap);
3112
3133
  break;
3113
3134
  case "children":
3114
- if (prop.value.type === "ArrayExpression") route.children = parseRoutesArray(prop.value, baseDir, warnings);
3135
+ if (prop.value.type === "ArrayExpression") route.children = parseRoutesArray(prop.value, baseDir, warnings, importMap);
3115
3136
  break;
3116
3137
  }
3117
3138
  }
3118
- if (!route.path) return null;
3139
+ if (!hasPath) return null;
3119
3140
  return route;
3120
3141
  }
3121
3142
  /**
3122
3143
  * Extract component path from various component definitions
3123
3144
  */
3124
- function extractComponentPath(node, baseDir) {
3125
- if (node.type === "Identifier") return;
3145
+ function extractComponentPath(node, baseDir, importMap) {
3146
+ if (node.type === "Identifier") return importMap.get(node.name);
3126
3147
  if (node.type === "ArrowFunctionExpression") {
3127
3148
  const body = node.body;
3128
3149
  if (body.type === "CallExpression" && body.callee.type === "Import") {