@zphhpzzph/vue-route-gen 1.0.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/README.md ADDED
@@ -0,0 +1,81 @@
1
+ # @signlab/vue-route-gen
2
+
3
+ Vue 3 file-based route generator for Vue Router.
4
+
5
+ ## Features
6
+
7
+ - Automatic route discovery from file structure
8
+ - Layout support (`layout.vue` or `layout/index.vue`)
9
+ - Dynamic route parameters (`$param` or `[param]`)
10
+ - Cache mechanism for fast rebuilds
11
+ - TypeScript support with generated types
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ npm install @signlab/vue-route-gen
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ### CLI
22
+
23
+ ```bash
24
+ vue-route-gen
25
+ ```
26
+
27
+ ### Programmatic
28
+
29
+ ```typescript
30
+ import { generateRoutes } from '@signlab/vue-route-gen';
31
+
32
+ // Generate routes with default options
33
+ generateRoutes();
34
+
35
+ // Or specify custom directories
36
+ generateRoutes({
37
+ pagesDir: './src/pages',
38
+ outFile: './src/router/route.gen.ts'
39
+ });
40
+ ```
41
+
42
+ ## File Structure
43
+
44
+ ```
45
+ src/pages/
46
+ ├── layout.vue # Root layout
47
+ ├── index.vue # Home page (/)
48
+ ├── about.vue # About page (/about)
49
+ ├── users/
50
+ │ ├── layout.vue # Users layout (/users)
51
+ │ ├── index.vue # Users list (/users)
52
+ │ └── [id].vue # User detail (/users/:id)
53
+ └── $slug.vue # Catch-all (/:slug)
54
+ ```
55
+
56
+ ## Configuration
57
+
58
+ ### Options
59
+
60
+ - `pagesDir`: Pages directory path (default: `src/pages`)
61
+ - `outFile`: Output file path (default: `src/router/route.gen.ts`)
62
+
63
+ ### Excluded Directories
64
+
65
+ The following directories are automatically excluded:
66
+ - `components`
67
+ - `hooks`
68
+ - `service`
69
+
70
+ ## Generated Output
71
+
72
+ The generator creates:
73
+
74
+ 1. `ROUTE_NAME` - Route name constants
75
+ 2. `ROUTE_PATH` - Route path constants
76
+ 3. `ROUTE_PATH_BY_NAME` - Path lookup by name
77
+ 4. `routes` - Vue Router route records array
78
+
79
+ ## License
80
+
81
+ MIT
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { generateRoutes } from './index.js';
3
+ generateRoutes();
4
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,cAAc,EAAE,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface GenerateRoutesOptions {
2
+ pagesDir?: string;
3
+ outFile?: string;
4
+ }
5
+ export interface RouteEntry {
6
+ path: string;
7
+ name: string;
8
+ importPath: string;
9
+ children: RouteEntry[];
10
+ }
11
+ export interface RouteData {
12
+ routes: RouteEntry[];
13
+ routeNameList: readonly string[];
14
+ routePathList: readonly string[];
15
+ routePathByName: [string, string][];
16
+ }
17
+ export declare function generateRoutes({ pagesDir, outFile, }?: GenerateRoutesOptions): boolean;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CACrC;AAqZD,wBAAgB,cAAc,CAAC,EAC7B,QAAmD,EACnD,OAAgE,GACjE,GAAE,qBAA0B,GAAG,OAAO,CAiCtC"}
package/dist/index.js ADDED
@@ -0,0 +1,349 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ const EXCLUDED_DIRS = new Set(['components', 'hooks', 'service']);
4
+ const CACHE_FILE = path.resolve(process.cwd(), 'node_modules/.cache/route-gen.json');
5
+ function normalizePath(p) {
6
+ return p.split(path.sep).join('/');
7
+ }
8
+ function loadCache() {
9
+ try {
10
+ if (fs.existsSync(CACHE_FILE)) {
11
+ const data = fs.readFileSync(CACHE_FILE, 'utf8');
12
+ return JSON.parse(data);
13
+ }
14
+ }
15
+ catch {
16
+ // Ignore cache read errors
17
+ }
18
+ return { files: '{}', lastRoutesHash: null };
19
+ }
20
+ function saveCache(cache) {
21
+ const cacheDir = path.dirname(CACHE_FILE);
22
+ if (!fs.existsSync(cacheDir)) {
23
+ fs.mkdirSync(cacheDir, { recursive: true });
24
+ }
25
+ fs.writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2), 'utf8');
26
+ }
27
+ function getFileHash(filePath) {
28
+ const stats = fs.statSync(filePath);
29
+ return `${stats.mtimeMs}-${stats.size}`;
30
+ }
31
+ function buildFileHash(pagesDir) {
32
+ const files = scanVueFiles(pagesDir);
33
+ const hashObj = {};
34
+ for (const file of files) {
35
+ hashObj[normalizePath(path.relative(pagesDir, file))] = getFileHash(file);
36
+ }
37
+ return JSON.stringify(hashObj);
38
+ }
39
+ function scanVueFiles(rootDir) {
40
+ const files = [];
41
+ const stack = [rootDir];
42
+ while (stack.length > 0) {
43
+ const dir = stack.pop();
44
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
45
+ for (const entry of entries) {
46
+ const fullPath = path.join(dir, entry.name);
47
+ if (entry.isDirectory()) {
48
+ if (EXCLUDED_DIRS.has(entry.name)) {
49
+ continue;
50
+ }
51
+ stack.push(fullPath);
52
+ continue;
53
+ }
54
+ if (entry.isFile() && entry.name.endsWith('.vue')) {
55
+ files.push(fullPath);
56
+ }
57
+ }
58
+ }
59
+ return files.sort();
60
+ }
61
+ function isLayout(segments) {
62
+ const last = segments[segments.length - 1];
63
+ const secondLast = segments[segments.length - 2];
64
+ return last === 'layout' || (last === 'index' && secondLast === 'layout');
65
+ }
66
+ function segmentToPath(segment) {
67
+ if (segment.includes('.')) {
68
+ return segment.split('.').join('/');
69
+ }
70
+ if (segment === 'index') {
71
+ return '';
72
+ }
73
+ if (segment.startsWith('$')) {
74
+ return `:${segment.slice(1)}`;
75
+ }
76
+ if (segment.startsWith('[') && segment.endsWith(']')) {
77
+ return `:${segment.slice(1, -1)}`;
78
+ }
79
+ return segment;
80
+ }
81
+ function segmentsToPath(segments, leadingSlash) {
82
+ const rawPath = segments.map(segmentToPath).join('/');
83
+ const cleaned = rawPath.replace(/\/+/g, '/').replace(/\/$/, '');
84
+ if (leadingSlash) {
85
+ if (!cleaned) {
86
+ return '/';
87
+ }
88
+ return `/${cleaned}`;
89
+ }
90
+ return cleaned;
91
+ }
92
+ function joinPaths(parent, child) {
93
+ if (!child) {
94
+ return parent || '/';
95
+ }
96
+ if (!parent || parent === '/') {
97
+ return `/${child}`.replace(/\/+/g, '/');
98
+ }
99
+ return `${parent.replace(/\/$/, '')}/${child}`.replace(/\/+/g, '/');
100
+ }
101
+ function renderRoute(route, indent = ' ') {
102
+ const nextIndent = `${indent} `;
103
+ const lines = [];
104
+ lines.push(`${indent}{`);
105
+ lines.push(`${nextIndent}path: ${JSON.stringify(route.path)},`);
106
+ lines.push(`${nextIndent}name: ${JSON.stringify(route.name)},`);
107
+ lines.push(`${nextIndent}component: () => import(${JSON.stringify(route.importPath)}),`);
108
+ if (route.children.length === 0) {
109
+ lines.push(`${nextIndent}children: [],`);
110
+ }
111
+ else {
112
+ lines.push(`${nextIndent}children: [`);
113
+ lines.push(route.children
114
+ .map((child) => renderRoute(child, `${nextIndent} `))
115
+ .join(',\n'));
116
+ lines.push(`${nextIndent}],`);
117
+ }
118
+ lines.push(`${indent}}`);
119
+ return lines.join('\n');
120
+ }
121
+ function unique(values) {
122
+ const seen = new Set();
123
+ const out = [];
124
+ for (const value of values) {
125
+ if (!seen.has(value)) {
126
+ seen.add(value);
127
+ out.push(value);
128
+ }
129
+ }
130
+ return out;
131
+ }
132
+ function toConstKey(input) {
133
+ const withWordBreaks = input.replace(/([a-z0-9])([A-Z])/g, '$1_$2');
134
+ const normalized = withWordBreaks
135
+ .replace(/[^a-zA-Z0-9]+/g, '_')
136
+ .replace(/_+/g, '_')
137
+ .replace(/^_|_$/g, '');
138
+ return normalized.toUpperCase();
139
+ }
140
+ function buildRoutes({ pagesDir, outFile }) {
141
+ const files = scanVueFiles(pagesDir);
142
+ const outDir = path.dirname(outFile);
143
+ const entries = files.map((filePath) => {
144
+ const relPath = normalizePath(path.relative(pagesDir, filePath));
145
+ const withoutExt = relPath.replace(/\.vue$/, '');
146
+ const segments = withoutExt.split('/');
147
+ const importPath = normalizePath(path.relative(outDir, filePath));
148
+ const normalizedImportPath = importPath.startsWith('.') ? importPath : `./${importPath}`;
149
+ return {
150
+ filePath,
151
+ importPath: normalizedImportPath,
152
+ segments,
153
+ };
154
+ });
155
+ const layoutEntries = entries.filter((entry) => isLayout(entry.segments));
156
+ const layouts = layoutEntries
157
+ .map((entry) => {
158
+ const layoutIndex = entry.segments.indexOf('layout');
159
+ return {
160
+ importPath: entry.importPath,
161
+ segments: entry.segments.slice(0, layoutIndex),
162
+ depth: layoutIndex,
163
+ };
164
+ })
165
+ .sort((a, b) => a.depth - b.depth);
166
+ const pageEntries = entries
167
+ .filter((entry) => !isLayout(entry.segments))
168
+ .sort((a, b) => a.segments.join('/').localeCompare(b.segments.join('/')));
169
+ const pages = pageEntries.map((entry) => {
170
+ const pageLayouts = layouts.filter((layout) => {
171
+ if (layout.segments.length > entry.segments.length) {
172
+ return false;
173
+ }
174
+ return layout.segments.every((segment, index) => segment === entry.segments[index]);
175
+ });
176
+ return {
177
+ importPath: entry.importPath,
178
+ segments: entry.segments,
179
+ layouts: pageLayouts,
180
+ };
181
+ });
182
+ const layoutGroups = new Map();
183
+ const standalonePages = [];
184
+ for (const page of pages) {
185
+ if (page.layouts.length === 0) {
186
+ standalonePages.push(page);
187
+ continue;
188
+ }
189
+ const layoutKey = page.layouts[0].segments.join('/');
190
+ const group = layoutGroups.get(layoutKey) ?? [];
191
+ group.push(page);
192
+ layoutGroups.set(layoutKey, group);
193
+ }
194
+ const routeEntries = [];
195
+ const standaloneRoutes = standalonePages.map((page) => {
196
+ const name = page.segments.join('-');
197
+ const routePath = segmentsToPath(page.segments, true);
198
+ routeEntries.push({ name, path: routePath });
199
+ return {
200
+ path: routePath,
201
+ name,
202
+ importPath: page.importPath,
203
+ children: [],
204
+ };
205
+ });
206
+ const layoutRoutes = Array.from(layoutGroups.entries())
207
+ .sort(([a], [b]) => a.localeCompare(b))
208
+ .map(([, pagesInLayout]) => {
209
+ const sortedPages = [...pagesInLayout].sort((a, b) => a.segments.join('/').localeCompare(b.segments.join('/')));
210
+ const layout = sortedPages[0].layouts[0];
211
+ const layoutNameBase = layout.segments.join('-');
212
+ const layoutName = layoutNameBase ? `${layoutNameBase}-layout` : 'layout';
213
+ const layoutPath = segmentsToPath(layout.segments, true);
214
+ routeEntries.push({ name: layoutName, path: layoutPath });
215
+ const children = sortedPages.map((page) => {
216
+ const name = page.segments.join('-');
217
+ const relativeSegments = page.segments.slice(layout.segments.length);
218
+ const childPath = segmentsToPath(relativeSegments, false);
219
+ const fullPath = joinPaths(layoutPath, childPath);
220
+ routeEntries.push({ name, path: fullPath });
221
+ return {
222
+ path: childPath,
223
+ name,
224
+ importPath: page.importPath,
225
+ children: [],
226
+ };
227
+ });
228
+ return {
229
+ path: layoutPath,
230
+ name: layoutName,
231
+ importPath: layout.importPath,
232
+ children,
233
+ };
234
+ });
235
+ const routes = [...standaloneRoutes, ...layoutRoutes];
236
+ const uniqueNames = unique(routeEntries.map((entry) => entry.name));
237
+ const uniquePaths = unique(routeEntries.map((entry) => entry.path));
238
+ const pathByName = new Map();
239
+ for (const entry of routeEntries) {
240
+ if (!pathByName.has(entry.name)) {
241
+ pathByName.set(entry.name, entry.path);
242
+ }
243
+ }
244
+ const routePathByName = uniqueNames.map((name) => [name, pathByName.get(name)]);
245
+ return {
246
+ routes,
247
+ routeNameList: uniqueNames,
248
+ routePathList: uniquePaths,
249
+ routePathByName,
250
+ };
251
+ }
252
+ function renderRoutesFile({ routes, routeNameList, routePathList, routePathByName }) {
253
+ const lines = [];
254
+ const pathByName = new Map(routePathByName);
255
+ const routeKeyEntries = [];
256
+ const usedKeys = new Set();
257
+ for (const name of routeNameList) {
258
+ const baseKey = toConstKey(name) || 'ROUTE';
259
+ let key = baseKey;
260
+ let suffix = 1;
261
+ while (usedKeys.has(key)) {
262
+ suffix += 1;
263
+ key = `${baseKey}_${suffix}`;
264
+ }
265
+ usedKeys.add(key);
266
+ routeKeyEntries.push({
267
+ key,
268
+ name,
269
+ path: pathByName.get(name),
270
+ });
271
+ }
272
+ lines.push('// This file is auto-generated by @signlab/vue-route-gen.');
273
+ lines.push('// Do not edit this file directly.');
274
+ lines.push("import type { RouteRecordRaw } from 'vue-router';");
275
+ lines.push('');
276
+ lines.push('export const ROUTE_NAME = {');
277
+ lines.push(routeKeyEntries
278
+ .map((entry) => ` ${entry.key}: ${JSON.stringify(entry.name)},`)
279
+ .join('\n'));
280
+ lines.push('} as const;');
281
+ lines.push('');
282
+ lines.push('export type RouteName = (typeof ROUTE_NAME)[keyof typeof ROUTE_NAME];');
283
+ lines.push('');
284
+ lines.push('export const ROUTE_PATH = {');
285
+ lines.push(routeKeyEntries
286
+ .map((entry) => ` ${entry.key}: ${JSON.stringify(entry.path)},`)
287
+ .join('\n'));
288
+ lines.push('} as const;');
289
+ lines.push('');
290
+ lines.push('export type RoutePath = (typeof ROUTE_PATH)[keyof typeof ROUTE_PATH];');
291
+ lines.push('');
292
+ lines.push('export const ROUTE_PATH_BY_NAME = {');
293
+ lines.push(routeKeyEntries
294
+ .map((entry) => ` ${JSON.stringify(entry.name)}: ROUTE_PATH.${entry.key},`)
295
+ .join('\n'));
296
+ lines.push('} as const;');
297
+ lines.push('');
298
+ lines.push('export type RoutePathByName = typeof ROUTE_PATH_BY_NAME;');
299
+ lines.push('');
300
+ lines.push('export const routeNameList = [');
301
+ lines.push(routeNameList.map((name) => ` ${JSON.stringify(name)},`).join('\n'));
302
+ lines.push('] as const;');
303
+ lines.push('');
304
+ lines.push('export const routePathList = [');
305
+ lines.push(routePathList.map((path) => ` ${JSON.stringify(path)},`).join('\n'));
306
+ lines.push('] as const;');
307
+ lines.push('');
308
+ lines.push('export const routePathByName = {');
309
+ lines.push(routePathByName
310
+ .map(([name, pathValue]) => ` ${JSON.stringify(name)}: ${JSON.stringify(pathValue)},`)
311
+ .join('\n'));
312
+ lines.push('} as const;');
313
+ lines.push('');
314
+ lines.push('export const routes = [');
315
+ lines.push(routes.map((route) => renderRoute(route)).join(',\n'));
316
+ lines.push('] satisfies RouteRecordRaw[];');
317
+ lines.push('');
318
+ lines.push('export default routes;');
319
+ lines.push('');
320
+ return `${lines.join('\n')}\n`;
321
+ }
322
+ export function generateRoutes({ pagesDir = path.resolve(process.cwd(), 'src/pages'), outFile = path.resolve(process.cwd(), 'src/router/route.gen.ts'), } = {}) {
323
+ if (!fs.existsSync(pagesDir)) {
324
+ throw new Error(`Pages directory not found: ${pagesDir}`);
325
+ }
326
+ // Load cache and check if we can skip generation
327
+ const cache = loadCache();
328
+ const currentFilesHash = buildFileHash(pagesDir);
329
+ // If files haven't changed and output exists, skip generation
330
+ if (cache.files === currentFilesHash && fs.existsSync(outFile)) {
331
+ return false;
332
+ }
333
+ const data = buildRoutes({ pagesDir, outFile });
334
+ const output = renderRoutesFile(data);
335
+ fs.mkdirSync(path.dirname(outFile), { recursive: true });
336
+ if (fs.existsSync(outFile)) {
337
+ const current = fs.readFileSync(outFile, 'utf8');
338
+ if (current === output) {
339
+ // Save cache even if output unchanged
340
+ saveCache({ files: currentFilesHash, lastRoutesHash: currentFilesHash });
341
+ return false;
342
+ }
343
+ }
344
+ fs.writeFileSync(outFile, output, 'utf8');
345
+ // Save cache after successful generation
346
+ saveCache({ files: currentFilesHash, lastRoutesHash: currentFilesHash });
347
+ return true;
348
+ }
349
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@zphhpzzph/vue-route-gen",
3
+ "version": "1.0.0",
4
+ "description": "Vue 3 route generator for file-based routing",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "bin": {
18
+ "vue-route-gen": "./dist/cli.js"
19
+ },
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "dev": "tsc --watch",
23
+ "prepublishOnly": "pnpm run build",
24
+ "publish": "npm publish --access public --registry https://registry.npmjs.org/"
25
+ },
26
+ "keywords": [
27
+ "vue",
28
+ "vue-router",
29
+ "route-generator",
30
+ "file-based-routing"
31
+ ],
32
+ "author": "z-ph",
33
+ "license": "MIT",
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/z-ph/signLab-front.git",
40
+ "directory": "packages/vue-route-gen"
41
+ },
42
+ "homepage": "https://github.com/z-ph/signLab-front/tree/main/packages/vue-route-gen#readme",
43
+ "bugs": {
44
+ "url": "https://github.com/z-ph/signLab-front/issues"
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^20.11.0",
48
+ "typescript": "^5.3.3"
49
+ },
50
+ "engines": {
51
+ "node": ">=18.0.0"
52
+ }
53
+ }