{"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/context.ts","../src/files.ts","../src/utils.ts","../src/options.ts","../src/stringify.ts","../src/resolvers/react.ts","../src/resolvers/solid.ts","../src/resolvers/vue.ts","../src/customBlock.ts"],"sourcesContent":["import type { Plugin } from 'vite'\r\nimport type { UserOptions } from './types'\r\nimport { MODULE_ID_VIRTUAL, ROUTE_BLOCK_ID_VIRTUAL, routeBlockQueryRE } from './constants'\r\n\r\nimport { PageContext } from './context'\r\nimport { parsePageRequest } from './utils'\r\n\r\nfunction pagesPlugin(userOptions: UserOptions = {}): Plugin {\r\n  let ctx: PageContext\r\n\r\n  return {\r\n    name: 'vite-plugin-pages',\r\n    enforce: 'pre',\r\n    async configResolved(config) {\r\n      // auto set resolver for react project\r\n      if (\r\n        !userOptions.resolver\r\n        && config.plugins.some(i => i.name.includes('vite:react'))\r\n      ) {\r\n        userOptions.resolver = 'react'\r\n      }\r\n\r\n      // auto set resolver for solid project\r\n      if (\r\n        !userOptions.resolver\r\n        && config.plugins.some(i => i.name.includes('solid'))\r\n      ) {\r\n        userOptions.resolver = 'solid'\r\n      }\r\n\r\n      ctx = new PageContext(userOptions, config.root)\r\n      ctx.setLogger(config.logger)\r\n      await ctx.searchGlob()\r\n    },\r\n    api: {\r\n      getResolvedRoutes() {\r\n        return ctx.options.resolver.getComputedRoutes(ctx)\r\n      },\r\n    },\r\n    configureServer(server) {\r\n      ctx.setupViteServer(server)\r\n    },\r\n    resolveId(id) {\r\n      if (ctx.options.moduleIds.includes(id))\r\n        return `${MODULE_ID_VIRTUAL}?id=${id}`\r\n\r\n      if (routeBlockQueryRE.test(id))\r\n        return ROUTE_BLOCK_ID_VIRTUAL\r\n\r\n      return null\r\n    },\r\n    async load(id) {\r\n      const {\r\n        moduleId,\r\n        pageId,\r\n      } = parsePageRequest(id)\r\n\r\n      if (moduleId === MODULE_ID_VIRTUAL && pageId && ctx.options.moduleIds.includes(pageId))\r\n        return ctx.resolveRoutes()\r\n\r\n      if (id === ROUTE_BLOCK_ID_VIRTUAL) {\r\n        return {\r\n          code: 'export default {};',\r\n          map: null,\r\n        }\r\n      }\r\n\r\n      return null\r\n    },\r\n  }\r\n}\r\n\r\nexport { syncIndexResolver } from './options'\r\nexport type {\r\n  ReactRoute,\r\n  SolidRoute,\r\n  VueRoute,\r\n} from './resolvers'\r\n\r\nexport {\r\n  reactResolver,\r\n  solidResolver,\r\n  vueResolver,\r\n} from './resolvers'\r\nexport * from './types'\r\nexport { PageContext }\r\nexport default pagesPlugin\r\n","export const MODULE_IDS = [\r\n  '~pages',\r\n  '~react-pages',\r\n  '~solid-pages',\r\n  'pages-generated',\r\n  'virtual:generated-pages',\r\n  'virtual:generated-pages-react',\r\n]\r\n\r\nexport const MODULE_ID_VIRTUAL = 'virtual:vite-plugin-pages/generated-pages'\r\nexport const ROUTE_BLOCK_ID_VIRTUAL = 'virtual:vite-plugin-pages/route-block'\r\nexport const ROUTE_IMPORT_NAME = '__pages_import_$1__'\r\n\r\nexport const routeBlockQueryRE = /\\?vue&type=route/\r\n\r\nexport const dynamicRouteRE = /^\\[(.+)\\]$/\r\nexport const cacheAllRouteRE = /^\\[\\.{3}(.*)\\]$/\r\nexport const replaceDynamicRouteRE = /^\\[(?:\\.{3})?(.*)\\]$/\r\n\r\nexport const nuxtDynamicRouteRE = /^_(.*)$/\r\nexport const nuxtCacheAllRouteRE = /^_$/\r\n\r\nexport const replaceIndexRE = /\\/?index$/\r\n","import type { Logger, ViteDevServer } from 'vite'\r\nimport type { PageOptions, ResolvedOptions, UserOptions } from './types'\r\nimport { join, resolve } from 'node:path'\r\nimport process from 'node:process'\r\nimport { getPageFiles } from './files'\r\nimport { resolveOptions } from './options'\r\n\r\nimport { debug, invalidatePagesModule, isTarget, slash, toArray } from './utils'\r\n\r\nexport interface PageRoute {\r\n  path: string\r\n  route: string\r\n}\r\n\r\nexport class PageContext {\r\n  private _server: ViteDevServer | undefined\r\n  private _pageRouteMap = new Map<string, PageRoute>()\r\n\r\n  rawOptions: UserOptions\r\n  root: string\r\n  options: ResolvedOptions\r\n  logger?: Logger\r\n\r\n  constructor(userOptions: UserOptions, viteRoot: string = process.cwd()) {\r\n    this.rawOptions = userOptions\r\n    this.root = slash(viteRoot)\r\n    debug.env('root', this.root)\r\n    this.options = resolveOptions(userOptions, this.root)\r\n    debug.options(this.options)\r\n  }\r\n\r\n  setLogger(logger: Logger) {\r\n    this.logger = logger\r\n  }\r\n\r\n  setupViteServer(server: ViteDevServer) {\r\n    if (this._server === server)\r\n      return\r\n\r\n    this._server = server\r\n    this.setupWatcher(server.watcher)\r\n  }\r\n\r\n  setupWatcher(watcher: ViteDevServer['watcher']) {\r\n    watcher\r\n      .on('unlink', async (path) => {\r\n        path = slash(path)\r\n        if (!isTarget(path, this.options))\r\n          return\r\n        await this.removePage(path)\r\n        this.onUpdate()\r\n      })\r\n    watcher\r\n      .on('add', async (path) => {\r\n        path = slash(path)\r\n        if (!isTarget(path, this.options))\r\n          return\r\n        const page = this.options.dirs.find(i => path.startsWith(slash(resolve(this.root, i.dir))))!\r\n        await this.addPage(path, page)\r\n        this.onUpdate()\r\n      })\r\n\r\n    watcher\r\n      .on('change', async (path) => {\r\n        path = slash(path)\r\n        if (!isTarget(path, this.options))\r\n          return\r\n        const page = this._pageRouteMap.get(path)\r\n        if (page)\r\n          await this.options.resolver.hmr?.changed?.(this, path)\r\n      })\r\n  }\r\n\r\n  async addPage(path: string | string[], pageDir: PageOptions) {\r\n    debug.pages('add', path)\r\n    for (const p of toArray(path)) {\r\n      const pageDirPath = slash(resolve(this.root, pageDir.dir))\r\n      const extension = this.options.extensions.find(ext => p.endsWith(`.${ext}`))\r\n      if (!extension)\r\n        continue\r\n\r\n      const route = slash(join(pageDir.baseRoute, p.replace(`${pageDirPath}/`, '').replace(`.${extension}`, '')))\r\n      this._pageRouteMap.set(p, {\r\n        path: p,\r\n        route,\r\n      })\r\n      await this.options.resolver.hmr?.added?.(this, p)\r\n    }\r\n  }\r\n\r\n  async removePage(path: string) {\r\n    debug.pages('remove', path)\r\n    this._pageRouteMap.delete(path)\r\n    await this.options.resolver.hmr?.removed?.(this, path)\r\n  }\r\n\r\n  onUpdate() {\r\n    if (!this._server)\r\n      return\r\n\r\n    invalidatePagesModule(this._server)\r\n    debug.hmr('Reload generated pages.')\r\n    this._server.ws.send({\r\n      type: 'full-reload',\r\n    })\r\n  }\r\n\r\n  async resolveRoutes() {\r\n    return this.options.resolver.resolveRoutes(this)\r\n  }\r\n\r\n  async searchGlob() {\r\n    const pageDirFiles = this.options.dirs.map((page) => {\r\n      const pagesDirPath = slash(resolve(this.options.root, page.dir))\r\n      const files = getPageFiles(pagesDirPath, this.options, page)\r\n      debug.search(page.dir, files)\r\n      return {\r\n        ...page,\r\n        files: files.map(file => slash(file)),\r\n      }\r\n    })\r\n\r\n    for (const page of pageDirFiles)\r\n      await this.addPage(page.files, page)\r\n\r\n    debug.cache(this.pageRouteMap)\r\n  }\r\n\r\n  get debug() {\r\n    return debug\r\n  }\r\n\r\n  get pageRouteMap() {\r\n    return this._pageRouteMap\r\n  }\r\n}\r\n","import type { PageOptions, ResolvedOptions } from './types'\r\nimport { join } from 'node:path'\r\nimport { globSync } from 'tinyglobby'\r\n\r\nimport { extsToGlob, slash } from './utils'\r\n\r\n/**\r\n * Resolves the page dirs for its for its given globs\r\n */\r\nconst VUE_MD_EXT_RE = /\\/$/\r\nexport function getPageDirs(PageOptions: PageOptions, root: string, exclude: string[]): PageOptions[] {\r\n  const dirs = globSync(slash(PageOptions.dir), {\r\n    ignore: exclude,\r\n    onlyDirectories: true,\r\n    dot: true,\r\n    expandDirectories: false,\r\n    cwd: root,\r\n  })\r\n\r\n  const pageDirs = dirs.map(dir => ({\r\n    ...PageOptions,\r\n    dir: dir.replace(VUE_MD_EXT_RE, ''),\r\n  }))\r\n\r\n  return pageDirs\r\n}\r\n\r\n/**\r\n * Resolves the files that are valid pages for the given context.\r\n */\r\nexport function getPageFiles(path: string, options: ResolvedOptions, pageOptions?: PageOptions): string[] {\r\n  const {\r\n    exclude,\r\n    extensions,\r\n  } = options\r\n\r\n  const ext = extsToGlob(extensions)\r\n  const pattern = pageOptions?.filePattern ?? `**/*.${ext}`\r\n\r\n  const files = globSync(pattern, {\r\n    ignore: exclude,\r\n    onlyFiles: true,\r\n    cwd: path,\r\n  }).map(p => slash(join(path, p)))\r\n\r\n  return files\r\n}\r\n","import type { ModuleNode, ViteDevServer } from 'vite'\r\nimport type { ResolvedOptions } from './types'\r\nimport { resolve, win32 } from 'node:path'\r\nimport { URLSearchParams } from 'node:url'\r\nimport Debug from 'debug'\r\nimport micromatch from 'micromatch'\r\n\r\nimport { cacheAllRouteRE, dynamicRouteRE, MODULE_ID_VIRTUAL, nuxtCacheAllRouteRE, nuxtDynamicRouteRE, replaceDynamicRouteRE, replaceIndexRE } from './constants'\r\n\r\nconst slashRE = /\\\\/g\r\n\r\nexport function slash(str: string) {\r\n  return str.replace(slashRE, '/')\r\n}\r\n\r\nexport function toArray<T>(value: T | T[] | null | undefined): T[] {\r\n  if (value == null)\r\n    return []\r\n  return Array.isArray(value) ? value : [value]\r\n}\r\n\r\nexport const debug = {\r\n  hmr: Debug('vite-plugin-pages:hmr'),\r\n  routeBlock: Debug('vite-plugin-pages:routeBlock'),\r\n  options: Debug('vite-plugin-pages:options'),\r\n  pages: Debug('vite-plugin-pages:pages'),\r\n  search: Debug('vite-plugin-pages:search'),\r\n  env: Debug('vite-plugin-pages:env'),\r\n  cache: Debug('vite-plugin-pages:cache'),\r\n  resolver: Debug('vite-plugin-pages:resolver'),\r\n}\r\n\r\nexport function extsToGlob(extensions: string[]) {\r\n  return extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0] || ''\r\n}\r\n\r\nexport function countSlash(value: string) {\r\n  let count = 0\r\n  for (let i = 0; i < value.length; i++) {\r\n    if (value[i] === '/')\r\n      count++\r\n  }\r\n  return count\r\n}\r\n\r\nfunction isPagesDir(path: string, options: ResolvedOptions) {\r\n  for (const page of options.dirs) {\r\n    const dirPath = slash(resolve(options.root, page.dir))\r\n    if (path.startsWith(dirPath))\r\n      return true\r\n  }\r\n  return false\r\n}\r\n\r\nexport function isTarget(path: string, options: ResolvedOptions) {\r\n  return isPagesDir(path, options) && !micromatch.isMatch(path, options.exclude) && options.extensionsRE.test(path)\r\n}\r\n\r\nexport function isDynamicRoute(routePath: string, nuxtStyle = false) {\r\n  return nuxtStyle\r\n    ? nuxtDynamicRouteRE.test(routePath)\r\n    : dynamicRouteRE.test(routePath)\r\n}\r\n\r\nexport function isCatchAllRoute(routePath: string, nuxtStyle = false) {\r\n  return nuxtStyle\r\n    ? nuxtCacheAllRouteRE.test(routePath)\r\n    : cacheAllRouteRE.test(routePath)\r\n}\r\n\r\nexport function resolveImportMode(\r\n  filepath: string,\r\n  options: ResolvedOptions,\r\n) {\r\n  const mode = options.importMode\r\n  if (typeof mode === 'function')\r\n    return mode(filepath, options)\r\n  return mode\r\n}\r\n\r\nexport function invalidatePagesModule(server: ViteDevServer) {\r\n  const { moduleGraph } = server\r\n  const mods = moduleGraph.getModulesByFile(MODULE_ID_VIRTUAL)\r\n  if (mods) {\r\n    const seen = new Set<ModuleNode>()\r\n    mods.forEach((mod) => {\r\n      moduleGraph.invalidateModule(mod, seen)\r\n    })\r\n  }\r\n}\r\n\r\nexport function normalizeCase(str: string, caseSensitive: boolean) {\r\n  if (!caseSensitive)\r\n    return str.toLocaleLowerCase()\r\n  return str\r\n}\r\n\r\nexport function normalizeName(name: string, isDynamic: boolean, nuxtStyle = false) {\r\n  if (!isDynamic)\r\n    return name\r\n\r\n  return nuxtStyle\r\n    ? name.replace(nuxtDynamicRouteRE, '$1') || 'all'\r\n    : name.replace(replaceDynamicRouteRE, '$1')\r\n}\r\n\r\nexport function buildReactRoutePath(node: string, nuxtStyle = false): string | undefined {\r\n  const isDynamic = isDynamicRoute(node, nuxtStyle)\r\n  const isCatchAll = isCatchAllRoute(node, nuxtStyle)\r\n  const normalizedName = normalizeName(node, isDynamic, nuxtStyle)\r\n\r\n  if (isDynamic) {\r\n    if (isCatchAll)\r\n      return '*'\r\n\r\n    return `:${normalizedName}`\r\n  }\r\n\r\n  return `${normalizedName}`\r\n}\r\n\r\n// https://github.dev/remix-run/remix/blob/264e3f8884c5cafd8d06acc3e01153b376745b7c/packages/remix-dev/config/routesConvention.ts#L105\r\nexport function buildReactRemixRoutePath(node: string): string | undefined {\r\n  const escapeStart = '['\r\n  const escapeEnd = ']'\r\n  let result = ''\r\n  let rawSegmentBuffer = ''\r\n\r\n  let inEscapeSequence = 0\r\n  let skipSegment = false\r\n  for (let i = 0; i < node.length; i++) {\r\n    const char = node.charAt(i)\r\n    const lastChar = i > 0 ? node.charAt(i - 1) : undefined\r\n    const nextChar = i < node.length - 1 ? node.charAt(i + 1) : undefined\r\n\r\n    function isNewEscapeSequence() {\r\n      return (\r\n        !inEscapeSequence && char === escapeStart && lastChar !== escapeStart\r\n      )\r\n    }\r\n\r\n    function isCloseEscapeSequence() {\r\n      return inEscapeSequence && char === escapeEnd && nextChar !== escapeEnd\r\n    }\r\n\r\n    function isStartOfLayoutSegment() {\r\n      return char === '_' && nextChar === '_' && !rawSegmentBuffer\r\n    }\r\n\r\n    if (skipSegment) {\r\n      if (char === '/' || char === '.' || char === win32.sep)\r\n        skipSegment = false\r\n\r\n      continue\r\n    }\r\n\r\n    if (isNewEscapeSequence()) {\r\n      inEscapeSequence++\r\n      continue\r\n    }\r\n\r\n    if (isCloseEscapeSequence()) {\r\n      inEscapeSequence--\r\n      continue\r\n    }\r\n\r\n    if (inEscapeSequence) {\r\n      result += char\r\n      continue\r\n    }\r\n\r\n    if (char === '/' || char === win32.sep || char === '.') {\r\n      if (rawSegmentBuffer === 'index' && result.endsWith('index'))\r\n        result = result.replace(replaceIndexRE, '')\r\n      else result += '/'\r\n\r\n      rawSegmentBuffer = ''\r\n      continue\r\n    }\r\n\r\n    if (isStartOfLayoutSegment()) {\r\n      skipSegment = true\r\n      continue\r\n    }\r\n\r\n    rawSegmentBuffer += char\r\n\r\n    if (char === '$') {\r\n      result += typeof nextChar === 'undefined' ? '*' : ':'\r\n      continue\r\n    }\r\n\r\n    result += char\r\n  }\r\n\r\n  if (rawSegmentBuffer === 'index' && result.endsWith('index'))\r\n    result = result.replace(replaceIndexRE, '')\r\n\r\n  return result || undefined\r\n}\r\n\r\nexport function parsePageRequest(id: string) {\r\n  const [moduleId, rawQuery] = id.split('?', 2)\r\n  const query = new URLSearchParams(rawQuery)\r\n  const pageId = query.get('id')\r\n  return {\r\n    moduleId,\r\n    query,\r\n    pageId,\r\n  }\r\n}\r\n","import type { ImportModeResolver, ResolvedOptions, UserOptions } from './types'\r\nimport { resolve } from 'node:path'\r\nimport process from 'node:process'\r\n\r\nimport { MODULE_IDS } from './constants'\r\nimport { getPageDirs } from './files'\r\nimport { reactResolver, solidResolver, vueResolver } from './resolvers'\r\nimport { slash, toArray } from './utils'\r\n\r\nconst VUE_MD_EXT_RE = /^\\//\r\nconst VUE_MD_EXT_RE1 = /\\/$/\r\nfunction resolvePageDirs(dirs: UserOptions['dirs'], root: string, exclude: string[]) {\r\n  dirs = toArray(dirs)\r\n  return dirs.flatMap((dir) => {\r\n    const option = typeof dir === 'string'\r\n      ? { dir, baseRoute: '' }\r\n      : dir\r\n\r\n    option.dir = slash(resolve(root, option.dir)).replace(`${root}/`, '')\r\n    option.baseRoute = option.baseRoute.replace(VUE_MD_EXT_RE, '').replace(VUE_MD_EXT_RE1, '')\r\n\r\n    return getPageDirs(option, root, exclude)\r\n  })\r\n}\r\n\r\nexport const syncIndexResolver: ImportModeResolver = (filepath, options) => {\r\n  for (const page of options.dirs) {\r\n    if (page.baseRoute === '' && filepath.startsWith(`/${page.dir}/index`))\r\n      return 'sync'\r\n  }\r\n  return 'async'\r\n}\r\n\r\nfunction getResolver(originalResolver: UserOptions['resolver']) {\r\n  let resolver = originalResolver || 'vue'\r\n\r\n  if (typeof resolver !== 'string')\r\n    return resolver\r\n\r\n  switch (resolver) {\r\n    case 'vue':\r\n      resolver = vueResolver()\r\n      break\r\n    case 'react':\r\n      resolver = reactResolver()\r\n      break\r\n    case 'solid':\r\n      resolver = solidResolver()\r\n      break\r\n    default:\r\n      throw new Error(`Unsupported resolver: ${resolver}`)\r\n  }\r\n  return resolver\r\n}\r\n\r\nexport function resolveOptions(userOptions: UserOptions, viteRoot?: string): ResolvedOptions {\r\n  const {\r\n    dirs = ['src/pages'],\r\n    routeBlockLang = 'json5',\r\n    exclude = ['node_modules', '.git', '**/__*__/**'],\r\n    caseSensitive = false,\r\n    routeNameSeparator = '-',\r\n    extendRoute,\r\n    onRoutesGenerated,\r\n    onClientGenerated,\r\n  } = userOptions\r\n\r\n  const root = viteRoot || slash(process.cwd())\r\n\r\n  const importMode = userOptions.importMode || syncIndexResolver\r\n\r\n  const importPath = userOptions.importPath || 'relative'\r\n\r\n  const resolver = getResolver(userOptions.resolver)\r\n\r\n  const extensions = userOptions.extensions || resolver.resolveExtensions()\r\n\r\n  const extensionsRE = new RegExp(`\\\\.(${extensions.join('|')})$`)\r\n\r\n  const resolvedDirs = resolvePageDirs(dirs, root, exclude)\r\n\r\n  const routeStyle = userOptions.routeStyle || 'next'\r\n\r\n  const moduleIds = userOptions.moduleId\r\n    ? [userOptions.moduleId]\r\n    : resolver.resolveModuleIds?.() || MODULE_IDS\r\n\r\n  const resolvedOptions: ResolvedOptions = {\r\n    dirs: resolvedDirs,\r\n    routeStyle,\r\n    routeBlockLang,\r\n    moduleIds,\r\n    root,\r\n    extensions,\r\n    importMode,\r\n    importPath,\r\n    exclude,\r\n    caseSensitive,\r\n    resolver,\r\n    extensionsRE,\r\n    extendRoute,\r\n    onRoutesGenerated,\r\n    onClientGenerated,\r\n    routeNameSeparator,\r\n  }\r\n\r\n  return resolvedOptions\r\n}\r\n","import type { ResolvedOptions } from './types'\r\nimport { ROUTE_IMPORT_NAME } from './constants'\r\n\r\nimport { resolveImportMode } from './utils'\r\n\r\nconst componentRE = /\"(?:component|element)\":(\"(.*?)\")/g\r\nconst hasFunctionRE = /\"(?:props|beforeEnter)\":(\"(.*?)\")/g\r\n\r\nconst multilineCommentsRE = /\\/\\*(.|[\\r\\n])*?\\*\\//g\r\nconst singlelineCommentsRE = /\\/\\/.*/g\r\nconst VUE_MD_EXT_RE = /(\\s)/g\r\nfunction replaceFunction(_: any, value: any) {\r\n  if (typeof value === 'function') {\r\n    const fnBody = value.toString()\r\n      .replace(multilineCommentsRE, '')\r\n      .replace(singlelineCommentsRE, '')\r\n      .replace(VUE_MD_EXT_RE, '')\r\n\r\n    // ES6 Arrow Function\r\n    if (fnBody.length < 8 || fnBody.substring(0, 8) !== 'function')\r\n      return `_NuFrRa_${fnBody}`\r\n\r\n    return fnBody\r\n  }\r\n\r\n  return value\r\n}\r\n\r\n/**\r\n * Creates a stringified Vue Router route definition.\r\n */\r\nexport function stringifyRoutes(\r\n  preparedRoutes: any[],\r\n  options: ResolvedOptions,\r\n) {\r\n  const importsMap: Map<string, string> = new Map()\r\n\r\n  function getImportString(path: string, importName: string) {\r\n    const mode = resolveImportMode(path, options)\r\n    return mode === 'sync'\r\n      ? `import ${importName} from \"${path}\"`\r\n      : `const ${importName} = ${\r\n        options.resolver.stringify?.dynamicImport?.(path) || `() => import(\"${path}\")`\r\n      }`\r\n  }\r\n\r\n  function componentReplacer(str: string, replaceStr: string, path: string) {\r\n    let importName = importsMap.get(path)\r\n\r\n    if (!importName)\r\n      importName = ROUTE_IMPORT_NAME.replace('$1', `${importsMap.size}`)\r\n\r\n    importsMap.set(path, importName)\r\n\r\n    importName = options.resolver.stringify?.component?.(importName) || importName\r\n\r\n    return str.replace(replaceStr, importName)\r\n  }\r\n\r\n  function functionReplacer(str: string, replaceStr: string, content: string) {\r\n    if (content.startsWith('function'))\r\n      return str.replace(replaceStr, content)\r\n\r\n    if (content.startsWith('_NuFrRa_'))\r\n      return str.replace(replaceStr, content.slice(8))\r\n\r\n    return str\r\n  }\r\n\r\n  const stringRoutes = JSON\r\n    .stringify(preparedRoutes, replaceFunction)\r\n    .replace(componentRE, componentReplacer)\r\n    .replace(hasFunctionRE, functionReplacer)\r\n\r\n  const imports = Array.from(importsMap).map(args => getImportString(...args))\r\n\r\n  return {\r\n    imports,\r\n    stringRoutes,\r\n  }\r\n}\r\n\r\nexport function generateClientCode(routes: any[], options: ResolvedOptions) {\r\n  const { imports, stringRoutes } = stringifyRoutes(routes, options)\r\n  const code = `${imports.join(';\\n')};\\n\\nconst routes = ${stringRoutes};\\n\\nexport default routes;`\r\n  return options.resolver.stringify?.final?.(code) || code\r\n}\r\n","import type { PageContext } from '../context'\r\nimport type { Optional, PageResolver, ResolvedOptions } from '../types'\r\n\r\nimport { generateClientCode } from '../stringify'\r\nimport {\r\n  buildReactRemixRoutePath,\r\n  buildReactRoutePath,\r\n  countSlash,\r\n  normalizeCase,\r\n} from '../utils'\r\n\r\nexport interface ReactRouteBase {\r\n  caseSensitive?: boolean\r\n  children?: ReactRouteBase[]\r\n  element?: string\r\n  index?: boolean\r\n  path?: string\r\n  rawRoute: string\r\n}\r\n\r\nexport interface ReactRoute extends Omit<Optional<ReactRouteBase, 'rawRoute' | 'path'>, 'children'> {\r\n  children?: ReactRoute[]\r\n}\r\nconst VUE_MD_EXT_RE = /^\\//\r\n\r\n/**\r\n * Sort child routes so React Router matches in correct priority order.\r\n * React Router v6+ matches routes in array order (first-match-wins),\r\n * so more specific routes must come before less specific ones.\r\n *\r\n * Priority (lowest weight first):\r\n *   0 — index route  (path \"/\")\r\n *   1 — static route  (e.g. \"about\", \"blog/today\")\r\n *   2 — dynamic route (e.g. \":id\")\r\n *   3 — catch-all     (path \"*\")\r\n */\r\nfunction sortReactRoutes(routes: ReactRouteBase[]): ReactRouteBase[] {\r\n  routes.sort((a, b) => {\r\n    const weight = (r: ReactRouteBase): number => {\r\n      const p = r.path ?? ''\r\n      if (p === '/')\r\n        return 0\r\n      if (p === '*')\r\n        return 3\r\n      if (p.startsWith(':'))\r\n        return 2\r\n      return 1\r\n    }\r\n    return weight(a) - weight(b)\r\n  })\r\n  for (const route of routes) {\r\n    if (route.children)\r\n      sortReactRoutes(route.children)\r\n  }\r\n  return routes\r\n}\r\n\r\nfunction prepareRoutes(\r\n  routes: ReactRoute[],\r\n  options: ResolvedOptions,\r\n  parent?: ReactRoute,\r\n) {\r\n  for (const route of routes) {\r\n    if (parent)\r\n      route.path = route.path?.replace(VUE_MD_EXT_RE, '')\r\n\r\n    if (route.children)\r\n      route.children = prepareRoutes(route.children, options, route)\r\n\r\n    delete route.rawRoute\r\n\r\n    Object.assign(route, options.extendRoute?.(route, parent) || {})\r\n  }\r\n\r\n  return routes\r\n}\r\n\r\nasync function computeReactRoutes(ctx: PageContext): Promise<ReactRoute[]> {\r\n  const { routeStyle, caseSensitive, importPath } = ctx.options\r\n  const nuxtStyle = routeStyle === 'nuxt'\r\n\r\n  const pageRoutes = [...ctx.pageRouteMap.values()]\r\n    // sort routes for HMR\r\n    .sort((a, b) => countSlash(a.route) - countSlash(b.route))\r\n\r\n  const routes: ReactRouteBase[] = []\r\n\r\n  pageRoutes.forEach((page) => {\r\n    const pathNodes = page.route.split('/')\r\n    const element = importPath === 'relative' ? page.path.replace(ctx.root, '') : page.path\r\n    let parentRoutes = routes\r\n\r\n    for (let i = 0; i < pathNodes.length; i++) {\r\n      const node = pathNodes[i]\r\n\r\n      const route: ReactRouteBase = {\r\n        caseSensitive,\r\n        path: '',\r\n        rawRoute: pathNodes.slice(0, i + 1).join('/'),\r\n      }\r\n\r\n      if (i === pathNodes.length - 1)\r\n        route.element = element\r\n\r\n      const isIndexRoute = normalizeCase(node, caseSensitive).endsWith('index')\r\n\r\n      if (!route.path && isIndexRoute) {\r\n        route.path = '/'\r\n      }\r\n      else if (!isIndexRoute) {\r\n        if (routeStyle === 'remix')\r\n          route.path = buildReactRemixRoutePath(node)\r\n        else\r\n          route.path = buildReactRoutePath(node, nuxtStyle)\r\n      }\r\n\r\n      // Check parent exits\r\n      const parent = parentRoutes.find((parent) => {\r\n        return pathNodes.slice(0, i).join('/') === parent.rawRoute\r\n      })\r\n\r\n      if (parent) {\r\n        // Make sure children exits in parent\r\n        parent.children = parent.children || []\r\n        // Append to parent's children\r\n        parentRoutes = parent.children\r\n      }\r\n\r\n      const exits = parentRoutes.some((parent) => {\r\n        return pathNodes.slice(0, i + 1).join('/') === parent.rawRoute\r\n      })\r\n      if (!exits)\r\n        parentRoutes.push(route)\r\n    }\r\n  })\r\n\r\n  // sort children so static routes come before dynamic/catch-all routes\r\n  sortReactRoutes(routes)\r\n\r\n  // sort by dynamic routes\r\n  let finalRoutes = prepareRoutes(routes, ctx.options)\r\n\r\n  finalRoutes = (await ctx.options.onRoutesGenerated?.(finalRoutes)) || finalRoutes\r\n\r\n  return finalRoutes\r\n}\r\n\r\nasync function resolveReactRoutes(ctx: PageContext) {\r\n  const finalRoutes = await computeReactRoutes(ctx)\r\n  let client = generateClientCode(finalRoutes, ctx.options)\r\n  client = (await ctx.options.onClientGenerated?.(client)) || client\r\n  return client\r\n}\r\n\r\nexport function reactResolver(): PageResolver {\r\n  return {\r\n    resolveModuleIds() {\r\n      return ['~react-pages', 'virtual:generated-pages-react']\r\n    },\r\n    resolveExtensions() {\r\n      return ['tsx', 'jsx', 'ts', 'js']\r\n    },\r\n    async resolveRoutes(ctx) {\r\n      return resolveReactRoutes(ctx)\r\n    },\r\n    async getComputedRoutes(ctx) {\r\n      return computeReactRoutes(ctx)\r\n    },\r\n    stringify: {\r\n      component: path => `React.createElement(${path})`,\r\n      dynamicImport: path => `React.lazy(() => import(\"${path}\"))`,\r\n      final: code => `import React from \"react\";\\n${code}`,\r\n    },\r\n  }\r\n}\r\n","import type { PageContext } from '../context'\r\nimport type { Optional, PageResolver, ResolvedOptions } from '../types'\r\n\r\nimport { generateClientCode } from '../stringify'\r\nimport {\r\n  buildReactRemixRoutePath,\r\n  buildReactRoutePath,\r\n  countSlash,\r\n  normalizeCase,\r\n} from '../utils'\r\n\r\nexport interface SolidRouteBase {\r\n  rawRoute: string\r\n  path: string\r\n  children?: SolidRouteBase[]\r\n  component?: string\r\n  element?: string\r\n}\r\n\r\nexport interface SolidRoute extends Omit<Optional<SolidRouteBase, 'rawRoute' | 'path'>, 'children'> {\r\n  children?: SolidRoute[]\r\n}\r\nconst VUE_MD_EXT_RE = /^\\//\r\nfunction prepareRoutes(\r\n  options: ResolvedOptions,\r\n  routes: SolidRoute[],\r\n  parent?: SolidRoute,\r\n) {\r\n  for (const route of routes) {\r\n    if (parent)\r\n      route.path = route.path?.replace(VUE_MD_EXT_RE, '')\r\n\r\n    if (route.children)\r\n      route.children = prepareRoutes(options, route.children, route)\r\n\r\n    delete route.rawRoute\r\n\r\n    Object.assign(route, options.extendRoute?.(route, parent) || {})\r\n  }\r\n\r\n  return routes\r\n}\r\n\r\nasync function computeSolidRoutes(ctx: PageContext): Promise<SolidRoute[]> {\r\n  const { routeStyle, caseSensitive, importPath } = ctx.options\r\n  const nuxtStyle = routeStyle === 'nuxt'\r\n\r\n  const pageRoutes = [...ctx.pageRouteMap.values()]\r\n    // sort routes for HMR\r\n    .sort((a, b) => countSlash(a.route) - countSlash(b.route))\r\n\r\n  const routes: SolidRouteBase[] = []\r\n\r\n  pageRoutes.forEach((page) => {\r\n    const pathNodes = page.route.split('/')\r\n\r\n    const component = importPath === 'relative' ? page.path.replace(ctx.root, '') : page.path\r\n    const element = importPath === 'relative' ? page.path.replace(ctx.root, '') : page.path\r\n\r\n    let parentRoutes = routes\r\n\r\n    for (let i = 0; i < pathNodes.length; i++) {\r\n      const node = pathNodes[i]\r\n      const normalizedPath = normalizeCase(node, caseSensitive)\r\n\r\n      const route: SolidRouteBase = {\r\n        path: '',\r\n        rawRoute: pathNodes.slice(0, i + 1).join('/'),\r\n      }\r\n\r\n      // Check parent exists\r\n      const parent = parentRoutes.find(parent =>\r\n        pathNodes.slice(0, i).join('/') === parent.rawRoute,\r\n      )\r\n\r\n      if (parent) {\r\n        // Make sure children exist in parent\r\n        parent.children = parent.children || []\r\n        // Append to parent's children\r\n        parentRoutes = parent.children\r\n      }\r\n\r\n      if (i === pathNodes.length - 1) {\r\n        route.element = element\r\n        route.component = component\r\n      }\r\n\r\n      if (normalizedPath === 'index') {\r\n        if (!route.path)\r\n          route.path = '/'\r\n      }\r\n      else if (normalizedPath !== 'index') {\r\n        if (routeStyle === 'remix')\r\n          route.path = buildReactRemixRoutePath(node) || ''\r\n        else\r\n          route.path = buildReactRoutePath(node, nuxtStyle) || ''\r\n      }\r\n\r\n      const exist = parentRoutes.some((parent) => {\r\n        return pathNodes.slice(0, i + 1).join('/') === parent.rawRoute\r\n      })\r\n      if (!exist)\r\n        parentRoutes.push(route)\r\n    }\r\n  })\r\n\r\n  // sort by dynamic routes\r\n  let finalRoutes = prepareRoutes(ctx.options, routes)\r\n\r\n  finalRoutes = (await ctx.options.onRoutesGenerated?.(finalRoutes)) || finalRoutes\r\n\r\n  return finalRoutes\r\n}\r\n\r\nasync function resolveSolidRoutes(ctx: PageContext) {\r\n  const finalRoutes = await computeSolidRoutes(ctx)\r\n  let client = generateClientCode(finalRoutes, ctx.options)\r\n  client = (await ctx.options.onClientGenerated?.(client)) || client\r\n  return client\r\n}\r\n\r\nexport function solidResolver(): PageResolver {\r\n  return {\r\n    resolveModuleIds() {\r\n      return ['~solid-pages']\r\n    },\r\n    resolveExtensions() {\r\n      return ['tsx', 'jsx', 'ts', 'js']\r\n    },\r\n    async resolveRoutes(ctx) {\r\n      return resolveSolidRoutes(ctx)\r\n    },\r\n    async getComputedRoutes(ctx) {\r\n      return computeSolidRoutes(ctx)\r\n    },\r\n    stringify: {\r\n      dynamicImport: path => `Solid.lazy(() => import(\"${path}\"))`,\r\n      final: code => `import * as Solid from \"solid-js\";\\n${code}`,\r\n    },\r\n  }\r\n}\r\n","import type { PageContext } from '../context'\r\nimport type { CustomBlock, Optional, PageResolver } from '../types'\r\nimport { dequal } from 'dequal'\r\nimport colors from 'picocolors'\r\n\r\nimport { getRouteBlock } from '../customBlock'\r\nimport { generateClientCode } from '../stringify'\r\nimport {\r\n  countSlash,\r\n  isCatchAllRoute,\r\n  isDynamicRoute,\r\n  normalizeCase,\r\n  normalizeName,\r\n} from '../utils'\r\n\r\nexport interface VueRouteBase {\r\n  name: string\r\n  path: string\r\n  props?: boolean\r\n  component: string\r\n  children?: VueRouteBase[]\r\n  customBlock?: CustomBlock\r\n  rawRoute: string\r\n}\r\n\r\nexport interface VueRoute extends Omit<Optional<VueRouteBase, 'rawRoute' | 'name'>, 'children'> {\r\n  children?: VueRoute[]\r\n}\r\nconst VUE_MD_EXT_RE = /^\\//\r\nfunction prepareRoutes(\r\n  ctx: PageContext,\r\n  routes: VueRoute[],\r\n  parent?: VueRoute,\r\n) {\r\n  const indexSuffixRE = new RegExp(`${ctx.options.routeNameSeparator}index$`)\r\n  for (const route of routes) {\r\n    if (route.name)\r\n      route.name = route.name.replace(indexSuffixRE, '')\r\n\r\n    if (parent)\r\n      route.path = route.path?.replace(VUE_MD_EXT_RE, '')\r\n\r\n    if (route.children)\r\n      route.children = prepareRoutes(ctx, route.children, route)\r\n\r\n    if (route.children?.find(c => c.name === route.name))\r\n      delete route.name\r\n\r\n    route.props = true\r\n\r\n    delete route.rawRoute\r\n\r\n    if (route.customBlock) {\r\n      Object.assign(route, route.customBlock || {})\r\n      delete route.customBlock\r\n    }\r\n\r\n    Object.assign(route, ctx.options.extendRoute?.(route, parent) || {})\r\n  }\r\n\r\n  return routes\r\n}\r\n\r\nasync function computeVueRoutes(ctx: PageContext, customBlockMap: Map<string, CustomBlock>): Promise<VueRoute[]> {\r\n  const { routeStyle, caseSensitive, importPath, routeNameSeparator } = ctx.options\r\n\r\n  const pageRoutes = [...ctx.pageRouteMap.values()]\r\n    // sort routes for HMR\r\n    .sort((a, b) => countSlash(a.route) - countSlash(b.route))\r\n\r\n  const routes: VueRouteBase[] = []\r\n\r\n  // Precompute route path set for O(1) index lookup in nuxt dynamic routes\r\n  const routePaths = new Set(pageRoutes.map(p => p.route))\r\n\r\n  pageRoutes.forEach((page) => {\r\n    const pathNodes = page.route.split('/')\r\n\r\n    // add leading slash to component path if not already there\r\n    const component = importPath === 'relative' ? page.path.replace(ctx.root, '') : page.path\r\n    const customBlock = customBlockMap.get(page.path)\r\n\r\n    const route: VueRouteBase = {\r\n      name: '',\r\n      path: '',\r\n      component,\r\n      customBlock,\r\n      rawRoute: page.route,\r\n    }\r\n\r\n    let parentRoutes = routes\r\n    let dynamicRoute = false\r\n\r\n    for (let i = 0; i < pathNodes.length; i++) {\r\n      const node = pathNodes[i]\r\n      const nuxtStyle = routeStyle === 'nuxt'\r\n      const isDynamic = isDynamicRoute(node, nuxtStyle)\r\n      const isCatchAll = isCatchAllRoute(node, nuxtStyle)\r\n      const normalizedName = normalizeName(node, isDynamic, nuxtStyle)\r\n      const normalizedPath = normalizeCase(normalizedName, caseSensitive)\r\n\r\n      if (isDynamic)\r\n        dynamicRoute = true\r\n\r\n      route.name += route.name ? `${routeNameSeparator}${normalizedName}` : normalizedName\r\n\r\n      // Check parent exits\r\n      const parent = parentRoutes.find((parent) => {\r\n        return pathNodes.slice(0, i + 1).join('/') === parent.rawRoute\r\n      })\r\n\r\n      if (parent) {\r\n        // Make sure children exist in parent\r\n        parent.children = parent.children || []\r\n        // Append to parent's children\r\n        parentRoutes = parent.children\r\n        // Reset path\r\n        route.path = ''\r\n      }\r\n      else if (normalizedPath === 'index') {\r\n        if (!route.path)\r\n          route.path = '/'\r\n      }\r\n      else if (normalizedPath !== 'index') {\r\n        if (isDynamic) {\r\n          route.path += `/:${normalizedName}`\r\n          // Catch-all route\r\n          if (isCatchAll) {\r\n            if (i === 0)\r\n              // root cache all route include children\r\n              route.path += '(.*)*'\r\n            else\r\n              // nested cache all route not include children\r\n              route.path += '(.*)'\r\n          }\r\n          else if (nuxtStyle && i === pathNodes.length - 1) {\r\n            // we need to search if the folder provide `index.vue`\r\n            if (!routePaths.has(page.route.replace(pathNodes[i], 'index')))\r\n              route.path += '?'\r\n          }\r\n        }\r\n        else {\r\n          route.path += `/${normalizedPath}`\r\n        }\r\n      }\r\n    }\r\n\r\n    // put dynamic routes at the end\r\n    if (dynamicRoute)\r\n      parentRoutes.push(route)\r\n    else\r\n      parentRoutes.unshift(route)\r\n  })\r\n\r\n  let finalRoutes = prepareRoutes(ctx, routes)\r\n\r\n  finalRoutes = (await ctx.options.onRoutesGenerated?.(finalRoutes)) || finalRoutes\r\n\r\n  return finalRoutes\r\n}\r\n\r\nasync function resolveVueRoutes(ctx: PageContext, customBlockMap: Map<string, CustomBlock>) {\r\n  const finalRoutes = await computeVueRoutes(ctx, customBlockMap)\r\n\r\n  let client = generateClientCode(finalRoutes, ctx.options)\r\n  client = (await ctx.options.onClientGenerated?.(client)) || client\r\n  return client\r\n}\r\n\r\nexport function vueResolver(): PageResolver {\r\n  const customBlockMap = new Map<string, CustomBlock>()\r\n\r\n  async function checkCustomBlockChange(ctx: PageContext, path: string) {\r\n    const exitsCustomBlock = customBlockMap.get(path)\r\n    let customBlock: CustomBlock | undefined\r\n    try {\r\n      customBlock = await getRouteBlock(path, ctx.options)\r\n    }\r\n    catch (error: any) {\r\n      ctx.logger?.error(colors.red(`[vite-plugin-pages] ${error.message}`))\r\n      return\r\n    }\r\n    if (!exitsCustomBlock && !customBlock)\r\n      return\r\n\r\n    if (!customBlock) {\r\n      customBlockMap.delete(path)\r\n      ctx.debug.routeBlock('%s deleted', path)\r\n      return\r\n    }\r\n    if (!exitsCustomBlock || !dequal(exitsCustomBlock, customBlock)) {\r\n      ctx.debug.routeBlock('%s old: %O', path, exitsCustomBlock)\r\n      ctx.debug.routeBlock('%s new: %O', path, customBlock)\r\n      customBlockMap.set(path, customBlock)\r\n      ctx.onUpdate()\r\n    }\r\n  }\r\n\r\n  return {\r\n    resolveExtensions() {\r\n      return ['vue', 'ts', 'js']\r\n    },\r\n    resolveModuleIds() {\r\n      return ['~pages', 'pages-generated', 'virtual:generated-pages']\r\n    },\r\n    async resolveRoutes(ctx) {\r\n      return resolveVueRoutes(ctx, customBlockMap)\r\n    },\r\n    async getComputedRoutes(ctx) {\r\n      return computeVueRoutes(ctx, customBlockMap)\r\n    },\r\n    hmr: {\r\n      added: async (ctx, path) => checkCustomBlockChange(ctx, path),\r\n      changed: async (ctx, path) => checkCustomBlockChange(ctx, path),\r\n      removed: async (_ctx, path) => {\r\n        customBlockMap.delete(path)\r\n      },\r\n    },\r\n  }\r\n}\r\n","import type { SFCBlock, SFCDescriptor } from '@vue/compiler-sfc'\r\nimport type { CustomBlock, ParsedJSX, ResolvedOptions } from './types'\r\nimport { readFile } from 'node:fs/promises'\r\n\r\n// @ts-expect-error no type\r\nimport extractComments from 'extract-comments'\r\n\r\nimport JSON5 from 'json5'\r\nimport { importModule } from 'local-pkg'\r\nimport { parse as YAMLParser } from 'yaml'\r\nimport { debug } from './utils'\r\n\r\nconst routeJSXReg = /^\\s+(route)\\s+/gm\r\n\r\nlet _compilerSfc: typeof import('@vue/compiler-sfc') | undefined\r\n\r\nexport function parseJSX(code: string): ParsedJSX[] {\r\n  return extractComments(code).slice(0, 1).filter((comment: ParsedJSX) => routeJSXReg.test(comment.value) && comment.value.includes(':') && comment.loc.start.line === 1)\r\n}\r\n\r\nexport function parseYamlComment(code: ParsedJSX[], path: string): CustomBlock {\r\n  return code.reduce((memo, item) => {\r\n    const { value } = item\r\n    const v = value.replace(routeJSXReg, '')\r\n    debug.routeBlock(`use ${v} parser`)\r\n    try {\r\n      const yamlResult = YAMLParser(v)\r\n\r\n      return {\r\n        ...memo,\r\n        ...yamlResult,\r\n      }\r\n    }\r\n    catch (err: any) {\r\n      throw new Error(`Invalid YAML format of comment in ${path}\\n${err.message}`)\r\n    }\r\n  }, {})\r\n}\r\n\r\nexport async function parseSFC(code: string): Promise<SFCDescriptor> {\r\n  try {\r\n    if (!_compilerSfc)\r\n      _compilerSfc = await importModule('@vue/compiler-sfc') as typeof import('@vue/compiler-sfc')\r\n    const { parse } = _compilerSfc\r\n    return parse(code, {\r\n      pad: 'space',\r\n    }).descriptor\r\n    // for @vue/compiler-sfc ^2.7\r\n    || (parse as any)({\r\n      source: code,\r\n    })\r\n  }\r\n  catch {\r\n    throw new Error('[vite-plugin-pages] Vue3\\'s \"@vue/compiler-sfc\" is required.')\r\n  }\r\n}\r\n\r\nexport function parseCustomBlock(block: SFCBlock, filePath: string, options: ResolvedOptions): any {\r\n  const lang = block.lang ?? options.routeBlockLang\r\n\r\n  debug.routeBlock(`use ${lang} parser`)\r\n\r\n  if (lang === 'json5') {\r\n    try {\r\n      return JSON5.parse(block.content)\r\n    }\r\n    catch (err: any) {\r\n      throw new Error(`Invalid JSON5 format of <${block.type}> content in ${filePath}\\n${err.message}`)\r\n    }\r\n  }\r\n  else if (lang === 'json') {\r\n    try {\r\n      return JSON.parse(block.content)\r\n    }\r\n    catch (err: any) {\r\n      throw new Error(`Invalid JSON format of <${block.type}> content in ${filePath}\\n${err.message}`)\r\n    }\r\n  }\r\n  else if (lang === 'yaml' || lang === 'yml') {\r\n    try {\r\n      return YAMLParser(block.content)\r\n    }\r\n    catch (err: any) {\r\n      throw new Error(`Invalid YAML format of <${block.type}> content in ${filePath}\\n${err.message}`)\r\n    }\r\n  }\r\n}\r\n\r\nexport async function getRouteBlock(path: string, options: ResolvedOptions) {\r\n  const content = await readFile(path, 'utf8')\r\n\r\n  const parsedSFC = await parseSFC(content)\r\n  const blockStr = parsedSFC?.customBlocks.find(b => b.type === 'route')\r\n\r\n  const parsedJSX = parseJSX(content)\r\n\r\n  if (!blockStr && parsedJSX.length === 0)\r\n    return\r\n\r\n  let result\r\n\r\n  if (blockStr)\r\n    result = parseCustomBlock(blockStr, path, options) as CustomBlock\r\n\r\n  if (parsedJSX.length > 0)\r\n    result = parseYamlComment(parsedJSX, path) as CustomBlock\r\n\r\n  return result\r\n}\r\n"],"mappings":"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","names":["import_node_path","import_node_process","import_node_path","Debug","micromatch","isNewEscapeSequence","isCloseEscapeSequence","isStartOfLayoutSegment","import_node_path","VUE_MD_EXT_RE","VUE_MD_EXT_RE","parent","VUE_MD_EXT_RE","prepareRoutes","parent","extractComments","YAMLParser","JSON5","VUE_MD_EXT_RE","prepareRoutes","parent","colors","VUE_MD_EXT_RE","process","process"]}