{"version":3,"file":"getServerManifest.js","names":[],"sources":["esm/server/getServerManifest.js"],"sourcesContent":["import { getContextKey, matchGroupName } from \"../router/matchers\";\nfunction isNotFoundRoute(route) {\n  return Boolean(route.dynamic && route.dynamic[route.dynamic.length - 1].notFound);\n}\nfunction sortByPathSpecificity([keyA, nodeA], [keyB, nodeB]) {\n  const partsA = keyA.split(\"/\").filter(Boolean);\n  const partsB = keyB.split(\"/\").filter(Boolean);\n  const minLen = Math.min(partsA.length, partsB.length);\n  for (let i = 0; i < minLen; i++) {\n    const aIsDynamic = partsA[i].startsWith(\"[\") || partsA[i] === \"+not-found\";\n    const bIsDynamic = partsB[i].startsWith(\"[\") || partsB[i] === \"+not-found\";\n    if (!aIsDynamic && bIsDynamic) return -1;\n    if (aIsDynamic && !bIsDynamic) return 1;\n    if (aIsDynamic && bIsDynamic) {\n      const aIsCatchAll = partsA[i].startsWith(\"[...\") || partsA[i] === \"+not-found\";\n      const bIsCatchAll = partsB[i].startsWith(\"[...\") || partsB[i] === \"+not-found\";\n      if (!aIsCatchAll && bIsCatchAll) return -1;\n      if (aIsCatchAll && !bIsCatchAll) return 1;\n      if (aIsCatchAll && bIsCatchAll) {\n        const aNotFound2 = partsA[i] === \"+not-found\";\n        const bNotFound2 = partsB[i] === \"+not-found\";\n        if (aNotFound2 && !bNotFound2) return 1;\n        if (!aNotFound2 && bNotFound2) return -1;\n      }\n    }\n  }\n  const aNotFound = isNotFoundRoute(nodeA);\n  const bNotFound = isNotFoundRoute(nodeB);\n  if (aNotFound && !bNotFound) return 1;\n  if (!aNotFound && bNotFound) return -1;\n  if (partsA.length !== partsB.length) {\n    return partsB.length - partsA.length;\n  }\n  return 0;\n}\nfunction getServerManifest(route) {\n  function getFlatNodes(route2, layouts) {\n    if (route2.children.length) {\n      return route2.children.flatMap((child) => {\n        return getFlatNodes(child, [...layouts || [], route2]);\n      });\n    }\n    let key;\n    if (route2.type === \"api\") {\n      key = getContextKey(route2.contextKey).replace(/\\/index$/, \"\") || \"/\";\n    } else {\n      const parentSegments = layouts?.flatMap((route3) => {\n        const key2 = getContextKey(route3.route).replace(/\\/index$/, \"\") || \"/\";\n        if (key2 === \"/\" || key2.startsWith(\"/(\")) {\n          return [];\n        }\n        return [key2];\n      });\n      key = (parentSegments ? parentSegments.join(\"\") : \"\") + getContextKey(route2.route).replace(/\\/index$/, \"\") || \"/\";\n    }\n    return [[key, { ...route2, layouts }]];\n  }\n  const flat = getFlatNodes(route).sort(sortByPathSpecificity);\n  const pathToRoute = {};\n  for (const [path, route2] of flat) {\n    if (pathToRoute[path]) {\n      console.warn(`\n[one] \\u274C Duplicate routes error`);\n      console.warn(\n        `  Multiple routes at the same path! One route will always win over the other.`\n      );\n      console.warn(`    path: ${path}`);\n      console.warn(`    first route: ${pathToRoute[path].contextKey}`);\n      console.warn(`    second route: ${route2.contextKey}\n`);\n    }\n    pathToRoute[path] = route2;\n  }\n  const apiRoutes = [];\n  const middlewareRoutes = [];\n  const pageRoutes = [];\n  const allRoutes = [];\n  const addedMiddlewares = {};\n  for (const [path, node] of flat) {\n    if (node.middlewares?.length) {\n      for (const middleware of node.middlewares) {\n        if (!addedMiddlewares[middleware.contextKey]) {\n          addedMiddlewares[middleware.contextKey] = true;\n          middlewareRoutes.push(getGeneratedNamedRouteRegex(path, middleware));\n        }\n      }\n    }\n    if (node.type === \"api\") {\n      const route3 = getGeneratedNamedRouteRegex(path, node);\n      apiRoutes.push(route3);\n      allRoutes.push(route3);\n      continue;\n    }\n    const route2 = getGeneratedNamedRouteRegex(path, node);\n    pageRoutes.push(route2);\n    allRoutes.push(route2);\n  }\n  return {\n    apiRoutes,\n    middlewareRoutes,\n    pageRoutes,\n    allRoutes\n  };\n}\nfunction getGeneratedNamedRouteRegex(normalizedRoute, node) {\n  return {\n    ...getRouteEntry(normalizedRoute, node),\n    generated: true,\n    isNotFound: isNotFoundRoute(node)\n  };\n}\nfunction getRouteEntry(normalizedRoute, node) {\n  const result = getPathMeta(normalizedRoute);\n  return {\n    file: node.contextKey,\n    page: getContextKey(node.route),\n    type: node.type,\n    namedRegex: result.namedRegex,\n    urlPath: result.urlPath,\n    urlCleanPath: result.urlCleanPath,\n    routeKeys: result.routeKeys,\n    layouts: node.layouts,\n    middlewares: node.middlewares\n  };\n}\nfunction buildGetSafeRouteKey() {\n  let currentCharCode = 96;\n  let currentLength = 1;\n  return () => {\n    let result = \"\";\n    let incrementNext = true;\n    for (let i = 0; i < currentLength; i++) {\n      if (incrementNext) {\n        currentCharCode++;\n        if (currentCharCode > 122) {\n          currentCharCode = 97;\n          incrementNext = true;\n        } else {\n          incrementNext = false;\n        }\n      }\n      result = String.fromCharCode(currentCharCode) + result;\n    }\n    if (incrementNext) {\n      currentLength++;\n      currentCharCode = 96;\n    }\n    return result;\n  };\n}\nfunction removeTrailingSlash(route) {\n  return route.replace(/\\/$/, \"\") || \"/\";\n}\nfunction getPathMeta(route) {\n  const segments = removeTrailingSlash(route).slice(1).split(\"/\");\n  const getSafeRouteKey = buildGetSafeRouteKey();\n  const routeKeys = {};\n  const urlPathParts = [];\n  const routeSegments = segments.map((segment, index) => {\n    if (segment === \"+not-found\" && index === segments.length - 1) {\n      segment = \"[...not-found]\";\n    }\n    if (/^\\[.*\\]$/.test(segment)) {\n      const { name, optional, repeat } = parseParam(segment);\n      let cleanedKey = name.replace(/\\W/g, \"\");\n      let invalidKey = false;\n      if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n        invalidKey = true;\n      }\n      if (!Number.isNaN(Number.parseInt(cleanedKey.slice(0, 1), 10))) {\n        invalidKey = true;\n      }\n      if (cleanedKey in routeKeys) {\n        invalidKey = true;\n      }\n      if (invalidKey) {\n        cleanedKey = getSafeRouteKey();\n      }\n      urlPathParts.push({\n        content: repeat ? \"/*\" : `/:${name}${optional ? \"?\" : \"\"}`\n      });\n      routeKeys[cleanedKey] = name;\n      return repeat ? optional ? `(?:/(?<${cleanedKey}>.+?))?` : `/(?<${cleanedKey}>.+?)` : `/(?<${cleanedKey}>(?!\\\\+not-found$)[^/]+?)`;\n    }\n    if (insideParensRegex.test(segment)) {\n      const groupName = matchGroupName(segment).split(\",\").map((group) => group.trim()).filter(Boolean);\n      urlPathParts.push({ content: `/:${groupName}?`, type: \"group\" });\n      if (groupName.length > 1) {\n        const optionalSegment = `\\\\((?:${groupName.map(escapeStringRegexp).join(\"|\")})\\\\)`;\n        return `(?:/${optionalSegment})?`;\n      }\n      return `(?:/${escapeStringRegexp(segment)})?`;\n    }\n    urlPathParts.push({ content: `/${segment}` });\n    return `/${escapeStringRegexp(segment)}`;\n  }).join(\"\");\n  let urlPath = urlPathParts.map((p) => p.content).join(\"\");\n  let urlCleanPath = urlPathParts.filter((p) => p.type !== \"group\").map((p) => p.content).join(\"\");\n  if (urlPath.endsWith(\"/*\")) {\n    urlPath = urlPath.replace(/\\?(?=\\/|\\/\\*)/g, \"\");\n  }\n  if (urlCleanPath.endsWith(\"/*\")) {\n    urlCleanPath = urlCleanPath.replace(/\\?(?=\\/|\\/\\*)/g, \"\");\n  }\n  return {\n    namedRegex: `^${routeSegments}(?:/)?$`,\n    urlPath: urlPath === \"\" ? \"/\" : urlPath,\n    urlCleanPath: urlCleanPath === \"\" ? \"/\" : urlCleanPath,\n    routeKeys\n  };\n}\nconst insideBracketsRegex = /^\\[.*\\]$/;\nconst insideParensRegex = /^\\(.*\\)$/;\nconst tripleDotRegex = /^\\.\\.\\./;\nconst replaceRegex = /[|\\\\{}()[\\]^$+*?.-]/g;\nconst hasRegExpRegex = /[|\\\\{}()[\\]^$+*?.-]/;\nfunction escapeStringRegexp(str) {\n  if (hasRegExpRegex.test(str)) {\n    return str.replace(replaceRegex, \"\\\\$&\");\n  }\n  return str;\n}\nfunction parseParam(param) {\n  let repeat = false;\n  let optional = false;\n  let name = param;\n  if (/^\\[\\[.*\\]\\]$/.test(name)) {\n    optional = true;\n    name = name.slice(2, -2);\n  } else if (insideBracketsRegex.test(name)) {\n    name = name.slice(1, -1);\n  }\n  if (tripleDotRegex.test(name)) {\n    repeat = true;\n    name = name.slice(3);\n  }\n  return { name, repeat, optional };\n}\nexport {\n  getServerManifest,\n  parseParam\n};\n//# sourceMappingURL=getServerManifest.js.map\n"],"mappings":";;;AACA,SAAS,gBAAgB,OAAO;CAC9B,OAAO,QAAQ,MAAM,WAAW,MAAM,QAAQ,MAAM,QAAQ,SAAS,EAAE,CAAC,QAAQ;AAClF;AACA,SAAS,sBAAsB,CAAC,MAAM,QAAQ,CAAC,MAAM,QAAQ;CAC3D,MAAM,SAAS,KAAK,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;CAC7C,MAAM,SAAS,KAAK,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;CAC7C,MAAM,SAAS,KAAK,IAAI,OAAO,QAAQ,OAAO,MAAM;CACpD,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;EAC/B,MAAM,aAAa,OAAO,EAAE,CAAC,WAAW,GAAG,KAAK,OAAO,OAAO;EAC9D,MAAM,aAAa,OAAO,EAAE,CAAC,WAAW,GAAG,KAAK,OAAO,OAAO;EAC9D,IAAI,CAAC,cAAc,YAAY,OAAO,CAAC;EACvC,IAAI,cAAc,CAAC,YAAY,OAAO;EACtC,IAAI,cAAc,YAAY;GAC5B,MAAM,cAAc,OAAO,EAAE,CAAC,WAAW,MAAM,KAAK,OAAO,OAAO;GAClE,MAAM,cAAc,OAAO,EAAE,CAAC,WAAW,MAAM,KAAK,OAAO,OAAO;GAClE,IAAI,CAAC,eAAe,aAAa,OAAO,CAAC;GACzC,IAAI,eAAe,CAAC,aAAa,OAAO;GACxC,IAAI,eAAe,aAAa;IAC9B,MAAM,aAAa,OAAO,OAAO;IACjC,MAAM,aAAa,OAAO,OAAO;IACjC,IAAI,cAAc,CAAC,YAAY,OAAO;IACtC,IAAI,CAAC,cAAc,YAAY,OAAO,CAAC;GACzC;EACF;CACF;CACA,MAAM,YAAY,gBAAgB,KAAK;CACvC,MAAM,YAAY,gBAAgB,KAAK;CACvC,IAAI,aAAa,CAAC,WAAW,OAAO;CACpC,IAAI,CAAC,aAAa,WAAW,OAAO,CAAC;CACrC,IAAI,OAAO,WAAW,OAAO,QAAQ;EACnC,OAAO,OAAO,SAAS,OAAO;CAChC;CACA,OAAO;AACT;AACA,SAAS,kBAAkB,OAAO;CAChC,SAAS,aAAa,QAAQ,SAAS;EACrC,IAAI,OAAO,SAAS,QAAQ;GAC1B,OAAO,OAAO,SAAS,SAAS,UAAU;IACxC,OAAO,aAAa,OAAO,CAAC,GAAG,WAAW,CAAC,GAAG,MAAM,CAAC;GACvD,CAAC;EACH;EACA,IAAI;EACJ,IAAI,OAAO,SAAS,OAAO;GACzB,MAAM,cAAc,OAAO,UAAU,CAAC,CAAC,QAAQ,YAAY,EAAE,KAAK;EACpE,OAAO;GACL,MAAM,iBAAiB,SAAS,SAAS,WAAW;IAClD,MAAM,OAAO,cAAc,OAAO,KAAK,CAAC,CAAC,QAAQ,YAAY,EAAE,KAAK;IACpE,IAAI,SAAS,OAAO,KAAK,WAAW,IAAI,GAAG;KACzC,OAAO,CAAC;IACV;IACA,OAAO,CAAC,IAAI;GACd,CAAC;GACD,OAAO,iBAAiB,eAAe,KAAK,EAAE,IAAI,MAAM,cAAc,OAAO,KAAK,CAAC,CAAC,QAAQ,YAAY,EAAE,KAAK;EACjH;EACA,OAAO,CAAC,CAAC,KAAK;GAAE,GAAG;GAAQ;EAAQ,CAAC,CAAC;CACvC;CACA,MAAM,OAAO,aAAa,KAAK,CAAC,CAAC,KAAK,qBAAqB;CAC3D,MAAM,cAAc,CAAC;CACrB,KAAK,MAAM,CAAC,MAAM,WAAW,MAAM;EACjC,IAAI,YAAY,OAAO;GACrB,QAAQ,KAAK;oCACiB;GAC9B,QAAQ,KACN,+EACF;GACA,QAAQ,KAAK,aAAa,MAAM;GAChC,QAAQ,KAAK,oBAAoB,YAAY,KAAK,CAAC,YAAY;GAC/D,QAAQ,KAAK,qBAAqB,OAAO,WAAW;CACzD;EACG;EACA,YAAY,QAAQ;CACtB;CACA,MAAM,YAAY,CAAC;CACnB,MAAM,mBAAmB,CAAC;CAC1B,MAAM,aAAa,CAAC;CACpB,MAAM,YAAY,CAAC;CACnB,MAAM,mBAAmB,CAAC;CAC1B,KAAK,MAAM,CAAC,MAAM,SAAS,MAAM;EAC/B,IAAI,KAAK,aAAa,QAAQ;GAC5B,KAAK,MAAM,cAAc,KAAK,aAAa;IACzC,IAAI,CAAC,iBAAiB,WAAW,aAAa;KAC5C,iBAAiB,WAAW,cAAc;KAC1C,iBAAiB,KAAK,4BAA4B,MAAM,UAAU,CAAC;IACrE;GACF;EACF;EACA,IAAI,KAAK,SAAS,OAAO;GACvB,MAAM,SAAS,4BAA4B,MAAM,IAAI;GACrD,UAAU,KAAK,MAAM;GACrB,UAAU,KAAK,MAAM;GACrB;EACF;EACA,MAAM,SAAS,4BAA4B,MAAM,IAAI;EACrD,WAAW,KAAK,MAAM;EACtB,UAAU,KAAK,MAAM;CACvB;CACA,OAAO;EACL;EACA;EACA;EACA;CACF;AACF;AACA,SAAS,4BAA4B,iBAAiB,MAAM;CAC1D,OAAO;EACL,GAAG,cAAc,iBAAiB,IAAI;EACtC,WAAW;EACX,YAAY,gBAAgB,IAAI;CAClC;AACF;AACA,SAAS,cAAc,iBAAiB,MAAM;CAC5C,MAAM,SAAS,YAAY,eAAe;CAC1C,OAAO;EACL,MAAM,KAAK;EACX,MAAM,cAAc,KAAK,KAAK;EAC9B,MAAM,KAAK;EACX,YAAY,OAAO;EACnB,SAAS,OAAO;EAChB,cAAc,OAAO;EACrB,WAAW,OAAO;EAClB,SAAS,KAAK;EACd,aAAa,KAAK;CACpB;AACF;AACA,SAAS,uBAAuB;CAC9B,IAAI,kBAAkB;CACtB,IAAI,gBAAgB;CACpB,aAAa;EACX,IAAI,SAAS;EACb,IAAI,gBAAgB;EACpB,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KAAK;GACtC,IAAI,eAAe;IACjB;IACA,IAAI,kBAAkB,KAAK;KACzB,kBAAkB;KAClB,gBAAgB;IAClB,OAAO;KACL,gBAAgB;IAClB;GACF;GACA,SAAS,OAAO,aAAa,eAAe,IAAI;EAClD;EACA,IAAI,eAAe;GACjB;GACA,kBAAkB;EACpB;EACA,OAAO;CACT;AACF;AACA,SAAS,oBAAoB,OAAO;CAClC,OAAO,MAAM,QAAQ,OAAO,EAAE,KAAK;AACrC;AACA,SAAS,YAAY,OAAO;CAC1B,MAAM,WAAW,oBAAoB,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG;CAC9D,MAAM,kBAAkB,qBAAqB;CAC7C,MAAM,YAAY,CAAC;CACnB,MAAM,eAAe,CAAC;CACtB,MAAM,gBAAgB,SAAS,KAAK,SAAS,UAAU;EACrD,IAAI,YAAY,gBAAgB,UAAU,SAAS,SAAS,GAAG;GAC7D,UAAU;EACZ;EACA,IAAI,WAAW,KAAK,OAAO,GAAG;GAC5B,MAAM,EAAE,MAAM,UAAU,WAAW,WAAW,OAAO;GACrD,IAAI,aAAa,KAAK,QAAQ,OAAO,EAAE;GACvC,IAAI,aAAa;GACjB,IAAI,WAAW,WAAW,KAAK,WAAW,SAAS,IAAI;IACrD,aAAa;GACf;GACA,IAAI,CAAC,OAAO,MAAM,OAAO,SAAS,WAAW,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG;IAC9D,aAAa;GACf;GACA,IAAI,cAAc,WAAW;IAC3B,aAAa;GACf;GACA,IAAI,YAAY;IACd,aAAa,gBAAgB;GAC/B;GACA,aAAa,KAAK,EAChB,SAAS,SAAS,OAAO,KAAK,OAAO,WAAW,MAAM,KACxD,CAAC;GACD,UAAU,cAAc;GACxB,OAAO,SAAS,WAAW,UAAU,WAAW,WAAW,OAAO,WAAW,SAAS,OAAO,WAAW;EAC1G;EACA,IAAI,kBAAkB,KAAK,OAAO,GAAG;GACnC,MAAM,YAAY,eAAe,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,OAAO;GAChG,aAAa,KAAK;IAAE,SAAS,KAAK,UAAU;IAAI,MAAM;GAAQ,CAAC;GAC/D,IAAI,UAAU,SAAS,GAAG;IACxB,MAAM,kBAAkB,SAAS,UAAU,IAAI,kBAAkB,CAAC,CAAC,KAAK,GAAG,EAAE;IAC7E,OAAO,OAAO,gBAAgB;GAChC;GACA,OAAO,OAAO,mBAAmB,OAAO,EAAE;EAC5C;EACA,aAAa,KAAK,EAAE,SAAS,IAAI,UAAU,CAAC;EAC5C,OAAO,IAAI,mBAAmB,OAAO;CACvC,CAAC,CAAC,CAAC,KAAK,EAAE;CACV,IAAI,UAAU,aAAa,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE;CACxD,IAAI,eAAe,aAAa,QAAQ,MAAM,EAAE,SAAS,OAAO,CAAC,CAAC,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE;CAC/F,IAAI,QAAQ,SAAS,IAAI,GAAG;EAC1B,UAAU,QAAQ,QAAQ,kBAAkB,EAAE;CAChD;CACA,IAAI,aAAa,SAAS,IAAI,GAAG;EAC/B,eAAe,aAAa,QAAQ,kBAAkB,EAAE;CAC1D;CACA,OAAO;EACL,YAAY,IAAI,cAAc;EAC9B,SAAS,YAAY,KAAK,MAAM;EAChC,cAAc,iBAAiB,KAAK,MAAM;EAC1C;CACF;AACF;AACA,MAAM,sBAAsB;AAC5B,MAAM,oBAAoB;AAC1B,MAAM,iBAAiB;AACvB,MAAM,eAAe;AACrB,MAAM,iBAAiB;AACvB,SAAS,mBAAmB,KAAK;CAC/B,IAAI,eAAe,KAAK,GAAG,GAAG;EAC5B,OAAO,IAAI,QAAQ,cAAc,MAAM;CACzC;CACA,OAAO;AACT;AACA,SAAS,WAAW,OAAO;CACzB,IAAI,SAAS;CACb,IAAI,WAAW;CACf,IAAI,OAAO;CACX,IAAI,eAAe,KAAK,IAAI,GAAG;EAC7B,WAAW;EACX,OAAO,KAAK,MAAM,GAAG,CAAC,CAAC;CACzB,OAAO,IAAI,oBAAoB,KAAK,IAAI,GAAG;EACzC,OAAO,KAAK,MAAM,GAAG,CAAC,CAAC;CACzB;CACA,IAAI,eAAe,KAAK,IAAI,GAAG;EAC7B,SAAS;EACT,OAAO,KAAK,MAAM,CAAC;CACrB;CACA,OAAO;EAAE;EAAM;EAAQ;CAAS;AAClC"}