bobe-router 0.0.65 → 0.0.67

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.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.esm.js","sources":["../src/plugin/scan.ts","../src/global.ts","../src/plugin/generate.ts","../src/plugin/index.ts"],"sourcesContent":["import { Menu } from '#/type';\nimport { Dirent, readdirSync } from 'fs';\nimport { join } from 'path';\n\nexport interface ScanItem {\n url: string;\n file: string;\n menuName?: string;\n}\n\nconst RE_DIR = /^(?:(\\d+)_)?([^_]+?)(?:_(.+?))?$/;\n\nconst DEFAULT_EXTENSIONS = ['js', 'jsx', 'ts', 'tsx'];\n\nfunction buildFileRegex(extensions: string[]): RegExp {\n const exts = extensions.map(e => e.replace(/^\\./, '')).join('|');\n return new RegExp(`^(?:(\\\\d+)_)?([^_]+?)(?:_(.*))?\\\\.(${exts})$`);\n}\n\nfunction buildUrl(base: string, part: string): string {\n return (base === '/' ? '' : base) + '/' + part.replace(/\\./g, '/');\n}\n\nfunction parseEntry(name: string, fileRe: RegExp): { order: number; pathPart: string; menuName?: string } | null {\n const dirMatch = name.match(RE_DIR);\n const isDir = !name.includes('.');\n\n if (isDir && dirMatch) {\n const [, orderStr, pathPart, menuName] = dirMatch;\n return { order: orderStr ? parseInt(orderStr, 10) : Infinity, pathPart, menuName };\n }\n\n const fileMatch = name.match(fileRe);\n if (fileMatch) {\n const [, orderStr, pathPart, menuName] = fileMatch;\n return { order: orderStr ? parseInt(orderStr, 10) : Infinity, pathPart, menuName };\n }\n\n return null;\n}\n\nfunction sortEntries(entries: Dirent[], fileRe: RegExp): Dirent[] {\n return entries.sort((a, b) => {\n const pa = parseEntry(a.name, fileRe);\n const pb = parseEntry(b.name, fileRe);\n const oa = pa?.order ?? Infinity;\n const ob = pb?.order ?? Infinity;\n if (oa !== ob) return oa - ob;\n return a.name.localeCompare(b.name);\n });\n}\n\nexport function scanDir(\n absDir: string,\n basePath = absDir,\n parentPath = '',\n menuRef?: Menu,\n extensions: string[] = DEFAULT_EXTENSIONS\n): { routes: ScanItem[]; menus: Menu[] } {\n const routes: ScanItem[] = [];\n const menus: Menu[] = [];\n let entries: Dirent[];\n const fileRe = buildFileRegex(extensions);\n\n try {\n entries = readdirSync(absDir, { withFileTypes: true });\n } catch {\n return { routes, menus };\n }\n\n entries = sortEntries(entries, fileRe);\n\n for (const ent of entries) {\n const full = join(absDir, ent.name);\n const parsed = parseEntry(ent.name, fileRe);\n if (!parsed) continue;\n\n const { pathPart, menuName } = parsed;\n\n if (ent.isDirectory()) {\n const urlPath = buildUrl(parentPath, pathPart);\n const menu: Menu = {\n name: menuName || pathPart,\n hasComponent: false,\n children: []\n };\n const child = scanDir(full, basePath, urlPath, menu, extensions);\n routes.push(...child.routes);\n menu.children = child.menus;\n menus.push(menu);\n } else if (ent.isFile()) {\n const isIndex = pathPart === 'index';\n const relFile = '/' + full.slice(basePath.length).replace(/^[/\\\\]/, '');\n const urlPath = buildUrl(parentPath, pathPart);\n\n if (isIndex) {\n const url = parentPath || '/';\n routes.push({ url, file: relFile, menuName });\n if (menuRef) {\n // 直接修改父菜单,不走 push\n if (menuName) menuRef.name = menuName;\n menuRef.path = url;\n menuRef.hasComponent = true;\n } else if (menuName) {\n menus.push({ name: menuName, path: '/', hasComponent: true, children: [] });\n }\n } else {\n routes.push({ url: urlPath, file: relFile, menuName });\n if (menuName) menus.push({ name: menuName, path: urlPath, hasComponent: true });\n }\n }\n }\n\n return { routes, menus };\n}\n","/** 通过 globalThis 传递的路由全局变量名 */\nexport enum GlobalKey {\n /** 路由表:{ [url]: { import/component } } */\n Routes = '__BOBE_INIT_ROUTES__',\n /** 菜单树:Menu[] */\n Menus = '__BOBE_INIT_MENUS__',\n /** 初始路径 */\n Path = '__BOBE_INIT_PATH__',\n}\n","import { GlobalKey } from '#/global';\nimport { Menu } from '#/type';\nimport type { ScanItem } from './scan';\n\nconst { Routes, Menus } = GlobalKey;\n\nexport function generateCsrInit(items: ScanItem[]): string {\n const entries = items.map(({ url, file }) =>\n ` '${url}': { import: () => import('${file}') }`\n );\n return `globalThis['${Routes}'] = {\\n` + entries.join(',\\n') + '\\n};';\n}\n\nexport function generateSsgInit(items: ScanItem[]): string {\n const imports = items.map(({ file }, i) =>\n `import __route_${i} from '${file}';`\n );\n const names = items.map((_, i) => `__route_${i}`);\n const entries = items.map(({ url }, i) =>\n ` '${url}': { component: __route_${i} }`\n );\n return imports.join('\\n')\n + `\\n\\nglobalThis['${Routes}'] = {\\n` + entries.join(',\\n') + '\\n};'\n + `\\nexport const __bobe_routes = [${names.join(', ')}];`;\n}\n\nexport function generateCsrMenus(menus: Menu[]): string {\n return `globalThis['${Menus}'] = ${JSON.stringify(menus)};`;\n}\n","import type { Plugin } from 'vite';\nimport { resolve } from 'path';\nimport { scanDir } from './scan';\nimport { generateCsrInit, generateSsgInit, generateCsrMenus } from './generate';\n\nexport interface BobeRouterPluginOptions {\n dir?: string;\n ssg?: boolean;\n /** 可识别的文件后缀,默认 ['js', 'jsx', 'ts', 'tsx'] */\n extensions?: string[];\n}\n\nexport default function bobeRouter(opt: BobeRouterPluginOptions = {}): Plugin[] {\n const dir = opt.dir || 'pages';\n const extensions = opt.extensions || ['js', 'jsx', 'ts', 'tsx'];\n\n let root: string;\n\n return [{\n name: 'bobe-router',\n enforce: 'pre',\n configResolved(config) {\n root = config.root;\n },\n\n resolveId(id) {\n if (id === 'bobe-router/csr-routes') return '\\0bobe-router/csr-routes';\n },\n\n load(id) {\n if (id === '\\0bobe-router/csr-routes') {\n const absDir = resolve(root, dir);\n const { routes, menus } = scanDir(absDir, root, '', undefined, extensions);\n return generateCsrInit(routes) + (menus.length ? '\\n' + generateCsrMenus(menus) : '');\n }\n },\n\n // SSR routes 直接注入到 entry-server.ts,不走虚拟模块(避免 Rollup tree-shake)\n transform(code, id) {\n if (id.includes('entry-server.ts')) {\n const absDir = resolve(root, dir);\n const { routes, menus } = scanDir(absDir, root, '', undefined, extensions);\n const ssg = generateSsgInit(routes) + (menus.length ? '\\n' + generateCsrMenus(menus) : '');\n return ssg + '\\n' + code;\n }\n }\n }];\n}\n"],"names":["RE_DIR","DEFAULT_EXTENSIONS","buildFileRegex","extensions","exts","map","e","replace","join","RegExp","buildUrl","base","part","parseEntry","name","fileRe","dirMatch","match","isDir","includes","_dirMatch","_slicedToArray","orderStr","pathPart","menuName","order","parseInt","Infinity","fileMatch","_fileMatch","sortEntries","entries","sort","a","b","pa","pb","oa","ob","localeCompare","scanDir","absDir","basePath","parentPath","menuRef","routes","menus","readdirSync","withFileTypes","ent","full","parsed","isDirectory","urlPath","menu","hasComponent","children","child","push","isFile","isIndex","relFile","slice","length","url","file","path","GlobalKey","Routes","Menus","generateCsrInit","items","generateSsgInit","imports","i","names","_","generateCsrMenus","JSON","stringify","bobeRouter","opt","dir","root","enforce","configResolved","config","resolveId","id","load","resolve","_scanDir","undefined","transform","code","_scanDir2","ssg"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.esm.js","sources":["../src/plugin/scan.ts","../src/global.ts","../src/plugin/generate.ts","../src/plugin/index.ts"],"sourcesContent":["import { Menu } from '#/type';\nimport { Dirent, readdirSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport matter from 'gray-matter';\n\nexport interface ScanItem {\n url: string;\n file: string;\n menuName?: string;\n /** routeMeta 对象字面量源文(用于嵌入生成代码) */\n metaRaw?: string;\n}\n\nconst RE_DIR = /^(?:(\\d+)_)?([^_]+?)(?:_(.+?))?$/;\n\nconst DEFAULT_EXTENSIONS = ['js', 'jsx', 'ts', 'tsx'];\n\nfunction buildFileRegex(extensions: string[]): RegExp {\n const exts = extensions.map(e => e.replace(/^\\./, '')).join('|');\n return new RegExp(`^(?:(\\\\d+)_)?([^_]+?)(?:_(.*))?\\\\.(${exts})$`);\n}\n\nfunction buildUrl(base: string, part: string): string {\n return (base === '/' ? '' : base) + '/' + part.replace(/\\./g, '/');\n}\n\n/**\n * 从页面文件源文中提取 `export const routeMeta = {...}`。\n * 返回 { raw: 源文, value: 求值后的对象 },无导出时返回 undefined。\n */\nfunction extractRouteMeta(filePath: string): { raw: string; value: Record<string, any> } | undefined {\n try {\n const ext = filePath.split('.').pop()?.toLowerCase();\n\n // .md/.mdx:解析 YAML frontmatter 中的 meta 字段\n if (ext === 'md' || ext === 'mdx') {\n const content = readFileSync(filePath, 'utf-8');\n const { data } = matter(content);\n if (!data.meta || typeof data.meta !== 'object') return undefined;\n const meta = data.meta as Record<string, any>;\n return { raw: JSON.stringify(meta), value: meta };\n }\n\n const content = readFileSync(filePath, 'utf-8');\n // 匹配 export const routeMeta(兼容 TS 类型标注 `: SomeType`)\n const metaExportRe = /export\\s+const\\s+routeMeta(\\s*:\\s*[\\w.]+(?:\\s*<[^>]*>)?)?\\s*=\\s*/;\n const match = content.match(metaExportRe);\n if (!match) return undefined;\n\n const startIdx = match.index! + match[0].length;\n let braceDepth = 0;\n let inString = false;\n let stringChar: string | null = null;\n let endIdx = startIdx;\n\n for (let i = startIdx; i < content.length; i++) {\n const ch = content[i];\n const prev = i > 0 ? content[i - 1] : '';\n\n // 字符串状态跟踪,避免字符串内的括号干扰\n if (!inString && (ch === '\"' || ch === \"'\" || ch === '`')) {\n inString = true;\n stringChar = ch;\n } else if (inString && ch === stringChar && prev !== '\\\\') {\n inString = false;\n stringChar = null;\n }\n\n if (!inString) {\n if (ch === '{') braceDepth++;\n else if (ch === '}') {\n braceDepth--;\n if (braceDepth === 0) {\n endIdx = i + 1;\n break;\n }\n }\n }\n }\n\n const raw = content.slice(startIdx, endIdx).trim();\n if (!raw) return undefined;\n\n // 尝试求值为 JS 对象(用于 Menu)\n let value: Record<string, any> | undefined;\n try {\n value = new Function('return ' + raw)() as Record<string, any>;\n } catch {\n // 求值失败(如 import 引用),Menu 无 meta 但仍返回 raw 用于嵌入路由表\n }\n\n return { raw, value: value || {} };\n } catch {\n return undefined;\n }\n}\n\n/**\n * 检测文件是否有 default 导出(即有组件),还是仅导出 routeMeta。\n * .ts/.js: 检查是否有 `export default`\n * .md/.mdx: 检查 frontmatter 之后是否有实际 markdown 内容\n */\nfunction hasDefaultExport(filePath: string): boolean {\n try {\n const ext = filePath.split('.').pop()?.toLowerCase();\n\n if (ext === 'md' || ext === 'mdx') {\n const content = readFileSync(filePath, 'utf-8');\n const { content: mdContent } = matter(content);\n return mdContent.trim().length > 0;\n }\n\n // .ts/.js/.tsx/.jsx:检查 export default\n const content = readFileSync(filePath, 'utf-8');\n return /export\\s+default\\s/.test(content);\n } catch {\n return false;\n }\n}\n\nfunction parseEntry(name: string, fileRe: RegExp): { order: number; pathPart: string; menuName?: string } | null {\n const dirMatch = name.match(RE_DIR);\n const isDir = !name.includes('.');\n\n if (isDir && dirMatch) {\n const [, orderStr, pathPart, menuName] = dirMatch;\n return { order: orderStr ? parseInt(orderStr, 10) : Infinity, pathPart, menuName };\n }\n\n const fileMatch = name.match(fileRe);\n if (fileMatch) {\n const [, orderStr, pathPart, menuName] = fileMatch;\n return { order: orderStr ? parseInt(orderStr, 10) : Infinity, pathPart, menuName };\n }\n\n return null;\n}\n\nfunction sortEntries(entries: Dirent[], fileRe: RegExp): Dirent[] {\n return entries.sort((a, b) => {\n const pa = parseEntry(a.name, fileRe);\n const pb = parseEntry(b.name, fileRe);\n const oa = pa?.order ?? Infinity;\n const ob = pb?.order ?? Infinity;\n if (oa !== ob) return oa - ob;\n return a.name.localeCompare(b.name);\n });\n}\n\nexport function scanDir(\n absDir: string,\n basePath = absDir,\n parentPath = '',\n menuRef?: Menu,\n extensions: string[] = DEFAULT_EXTENSIONS\n): { routes: ScanItem[]; menus: Menu[] } {\n const routes: ScanItem[] = [];\n const menus: Menu[] = [];\n let entries: Dirent[];\n const fileRe = buildFileRegex(extensions);\n\n try {\n entries = readdirSync(absDir, { withFileTypes: true });\n } catch {\n return { routes, menus };\n }\n\n entries = sortEntries(entries, fileRe);\n\n for (const ent of entries) {\n const full = join(absDir, ent.name);\n const parsed = parseEntry(ent.name, fileRe);\n if (!parsed) continue;\n\n const { pathPart, menuName } = parsed;\n\n if (ent.isDirectory()) {\n const urlPath = buildUrl(parentPath, pathPart);\n const menu: Menu = {\n name: menuName || pathPart,\n hasComponent: false,\n children: []\n };\n const child = scanDir(full, basePath, urlPath, menu, extensions);\n routes.push(...child.routes);\n menu.children = child.menus;\n menus.push(menu);\n } else if (ent.isFile()) {\n const isIndex = pathPart === 'index';\n const relFile = '/' + full.slice(basePath.length).replace(/^[/\\\\]/, '');\n const urlPath = buildUrl(parentPath, pathPart);\n\n // 提取 routeMeta\n const metaResult = extractRouteMeta(full);\n const metaRaw = metaResult?.raw;\n const meta = metaResult?.value && Object.keys(metaResult.value).length > 0\n ? metaResult.value\n : undefined;\n\n // 检测是否有 default 导出(有组件 = 有路由页面)\n const hasComp = hasDefaultExport(full);\n\n if (isIndex) {\n const url = parentPath || '/';\n\n // 仅有 routeMeta 无 default 导出的文件不加入路由表\n if (hasComp) {\n routes.push({ url, file: relFile, menuName, metaRaw });\n }\n\n if (menuRef) {\n // 直接修改父菜单,不走 push\n if (menuName) menuRef.name = menuName;\n if (hasComp) {\n menuRef.path = url;\n menuRef.hasComponent = true;\n }\n if (meta) menuRef.meta = meta;\n } else if (menuName) {\n menus.push({ name: menuName, path: hasComp ? '/' : undefined, hasComponent: hasComp, children: [], meta });\n }\n } else {\n if (hasComp) {\n routes.push({ url: urlPath, file: relFile, menuName, metaRaw });\n }\n if (menuName || meta) {\n menus.push({ name: menuName || pathPart, path: hasComp ? urlPath : undefined, hasComponent: hasComp, meta });\n }\n }\n }\n }\n\n return { routes, menus };\n}\n","/** 通过 globalThis 传递的路由全局变量名 */\nexport enum GlobalKey {\n /** 路由表:{ [url]: { import/component } } */\n Routes = '__BOBE_INIT_ROUTES__',\n /** 菜单树:Menu[] */\n Menus = '__BOBE_INIT_MENUS__',\n /** 初始路径 */\n Path = '__BOBE_INIT_PATH__',\n}\n","import { GlobalKey } from '#/global';\nimport { Menu } from '#/type';\nimport type { ScanItem } from './scan';\n\nconst { Routes, Menus } = GlobalKey;\n\nexport function generateCsrInit(items: ScanItem[]): string {\n const entries = items.map(({ url, file, metaRaw }) => {\n const metaPart = metaRaw ? `, meta: ${metaRaw}` : '';\n return ` '${url}': { import: () => import('${file}')${metaPart} }`;\n });\n return `globalThis['${Routes}'] = {\\n` + entries.join(',\\n') + '\\n};';\n}\n\nexport function generateSsgInit(items: ScanItem[]): string {\n const imports = items.map(({ file }, i) =>\n `import * as __module_${i} from '${file}';`\n );\n const names = items.map((_, i) => `__module_${i}.default`);\n const entries = items.map(({ url, metaRaw }, i) => {\n const metaPart = metaRaw ? `, meta: ${metaRaw}` : '';\n return ` '${url}': { component: __module_${i}.default, layout: __module_${i}.layout${metaPart} }`;\n });\n return imports.join('\\n')\n + `\\n\\nglobalThis['${Routes}'] = {\\n` + entries.join(',\\n') + '\\n};'\n + `\\nexport const __bobe_routes = [${names.join(', ')}];`;\n}\n\nexport function generateCsrMenus(menus: Menu[]): string {\n return `globalThis['${Menus}'] = ${JSON.stringify(menus)};`;\n}\n","import type { Plugin } from 'vite';\nimport { resolve } from 'path';\nimport { scanDir } from './scan';\nimport { generateCsrInit, generateSsgInit, generateCsrMenus } from './generate';\n\nexport interface BobeRouterPluginOptions {\n dir?: string;\n ssg?: boolean;\n /** 可识别的文件后缀,默认 ['js', 'jsx', 'ts', 'tsx'] */\n extensions?: string[];\n}\n\nexport default function bobeRouter(opt: BobeRouterPluginOptions = {}): Plugin[] {\n const dir = opt.dir || 'pages';\n const extensions = opt.extensions || ['js', 'jsx', 'ts', 'tsx'];\n\n let root: string;\n\n return [{\n name: 'bobe-router',\n enforce: 'pre',\n configResolved(config) {\n root = config.root;\n },\n\n resolveId(id) {\n if (id === 'bobe-router/csr-routes') return '\\0bobe-router/csr-routes';\n },\n\n load(id) {\n if (id === '\\0bobe-router/csr-routes') {\n const absDir = resolve(root, dir);\n const { routes, menus } = scanDir(absDir, root, '', undefined, extensions);\n return generateCsrInit(routes) + (menus.length ? '\\n' + generateCsrMenus(menus) : '');\n }\n },\n\n // SSR routes 直接注入到 entry-server.ts,不走虚拟模块(避免 Rollup tree-shake)\n transform(code, id) {\n if (id.includes('entry-server.ts')) {\n const absDir = resolve(root, dir);\n const { routes, menus } = scanDir(absDir, root, '', undefined, extensions);\n const ssg = generateSsgInit(routes) + (menus.length ? '\\n' + generateCsrMenus(menus) : '');\n return ssg + '\\n' + code;\n }\n }\n }];\n}\n"],"names":["RE_DIR","DEFAULT_EXTENSIONS","buildFileRegex","extensions","exts","map","e","replace","join","RegExp","buildUrl","base","part","extractRouteMeta","filePath","ext","split","pop","toLowerCase","content","readFileSync","_matter","matter","data","meta","undefined","raw","JSON","stringify","value","metaExportRe","match","startIdx","index","length","braceDepth","inString","stringChar","endIdx","i","ch","prev","slice","trim","Function","hasDefaultExport","_matter2","mdContent","test","parseEntry","name","fileRe","dirMatch","isDir","includes","_dirMatch","_slicedToArray","orderStr","pathPart","menuName","order","parseInt","Infinity","fileMatch","_fileMatch","sortEntries","entries","sort","a","b","pa","pb","oa","ob","localeCompare","scanDir","absDir","basePath","parentPath","menuRef","routes","menus","readdirSync","withFileTypes","ent","full","parsed","isDirectory","urlPath","menu","hasComponent","children","child","push","isFile","isIndex","relFile","metaResult","metaRaw","Object","keys","hasComp","url","file","path","GlobalKey","Routes","Menus","generateCsrInit","items","metaPart","generateSsgInit","imports","names","_","generateCsrMenus","bobeRouter","opt","dir","root","enforce","configResolved","config","resolveId","id","load","resolve","_scanDir","transform","code","_scanDir2","ssg"],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,15 @@
1
1
  {
2
2
  "name": "bobe-router",
3
- "version": "0.0.65",
3
+ "version": "0.0.67",
4
+ "type": "module",
4
5
  "main": "dist/bobe-router.cjs.js",
5
6
  "module": "dist/bobe-router.esm.js",
6
7
  "browser": "dist/bobe-router.umd.js",
7
8
  "types": "dist/index.d.ts",
8
9
  "private": false,
9
10
  "dependencies": {
10
- "aoye": "0.0.65"
11
+ "gray-matter": "^4.0.3",
12
+ "aoye": "0.0.67"
11
13
  },
12
14
  "exports": {
13
15
  ".": {
@@ -21,7 +23,6 @@
21
23
  "require": "./dist/plugin.cjs.js"
22
24
  }
23
25
  },
24
- "devDependencies": {},
25
26
  "files": [
26
27
  "dist"
27
28
  ],