@buzola/vite-plugin 0.0.3 → 0.0.5

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.
Files changed (36) hide show
  1. package/dist/__tests__/codegen.test.js +49 -1
  2. package/dist/__tests__/codegen.test.js.map +1 -1
  3. package/dist/__tests__/conventions.test.js +1 -1
  4. package/dist/__tests__/conventions.test.js.map +1 -1
  5. package/dist/__tests__/page-extractor.test.js +1 -1
  6. package/dist/__tests__/page-extractor.test.js.map +1 -1
  7. package/dist/__tests__/tree-builder.test.js +217 -78
  8. package/dist/__tests__/tree-builder.test.js.map +1 -1
  9. package/dist/generator/codegen.d.ts +1 -5
  10. package/dist/generator/codegen.d.ts.map +1 -1
  11. package/dist/generator/codegen.js +7 -9
  12. package/dist/generator/codegen.js.map +1 -1
  13. package/dist/generator/scanner.js +1 -1
  14. package/dist/generator/scanner.js.map +1 -1
  15. package/dist/generator/tree-builder.d.ts +7 -3
  16. package/dist/generator/tree-builder.d.ts.map +1 -1
  17. package/dist/generator/tree-builder.js +275 -188
  18. package/dist/generator/tree-builder.js.map +1 -1
  19. package/dist/index.d.ts +12 -12
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +6 -6
  22. package/dist/index.js.map +1 -1
  23. package/dist/plugin.d.ts +9 -0
  24. package/dist/plugin.d.ts.map +1 -1
  25. package/dist/plugin.js +12 -11
  26. package/dist/plugin.js.map +1 -1
  27. package/package.json +2 -2
  28. package/src/__tests__/codegen.test.ts +53 -1
  29. package/src/__tests__/conventions.test.ts +1 -1
  30. package/src/__tests__/page-extractor.test.ts +1 -1
  31. package/src/__tests__/tree-builder.test.ts +245 -81
  32. package/src/generator/codegen.ts +9 -11
  33. package/src/generator/scanner.ts +1 -1
  34. package/src/generator/tree-builder.ts +318 -224
  35. package/src/index.ts +12 -12
  36. package/src/plugin.ts +23 -12
@@ -1,11 +1,117 @@
1
1
  import * as path from 'node:path';
2
- import { parseDirName, parseFileName } from '../conventions';
3
- import { extractPages } from './page-extractor';
2
+ import { parseDirName, parseFileName } from '../conventions.js';
3
+ import { extractPages } from './page-extractor.js';
4
+ // ─── Public API ─────────────────────────────────────────────────────────────
4
5
  /**
5
6
  * Build a route tree from scanned files.
6
7
  * Loads each module via moduleLoader to extract createPage() metadata.
8
+ *
9
+ * Two-phase approach:
10
+ * 1. Extract flat route entries from all files.
11
+ * 2. Build the tree using route-pattern prefix matching (not file hierarchy).
7
12
  */
8
13
  export async function buildFileRouteTree(files, moduleLoader) {
14
+ const entries = await extractEntries(files, moduleLoader);
15
+ return buildTreeFromEntries(entries);
16
+ }
17
+ // ─── Phase 1: Extract flat route entries ────────────────────────────────────
18
+ async function extractEntries(files, moduleLoader) {
19
+ const entries = [];
20
+ for (const file of files) {
21
+ const ext = path.extname(file.relativePath);
22
+ const withoutExt = file.relativePath.slice(0, -ext.length);
23
+ const parts = withoutExt.split(path.sep);
24
+ const fileName = parts.pop();
25
+ const dirs = parts;
26
+ const fileInfo = parseFileName(fileName);
27
+ // Compute fileScope (URL path from directory structure, skipping pathless groups)
28
+ // and pathlessGroups chain
29
+ let fileScope = '';
30
+ const pathlessGroups = [];
31
+ let groupPath = '';
32
+ for (const dir of dirs) {
33
+ groupPath = groupPath ? `${groupPath}/${dir}` : dir;
34
+ const dirInfo = parseDirName(dir);
35
+ if (dirInfo.isPathlessGroup) {
36
+ pathlessGroups.push(groupPath);
37
+ }
38
+ else {
39
+ fileScope = joinPath(fileScope, dirInfo.segment);
40
+ }
41
+ }
42
+ if (!fileScope)
43
+ fileScope = '/';
44
+ if (fileInfo.isLayout) {
45
+ // Detect pathless group layout: immediate parent dir is a pathless group
46
+ const lastDir = dirs.length > 0 ? dirs[dirs.length - 1] : null;
47
+ const isPathlessGroupLayout = lastDir != null && parseDirName(lastDir).isPathlessGroup;
48
+ entries.push({
49
+ routePattern: fileScope,
50
+ treePosition: fileScope,
51
+ filePath: file.absolutePath,
52
+ exportName: 'default',
53
+ kind: 'layout',
54
+ params: [],
55
+ fileScope,
56
+ pathlessGroups,
57
+ pathlessGroupId: isPathlessGroupLayout ? groupPath : undefined,
58
+ });
59
+ }
60
+ else if (fileInfo.isNotFound) {
61
+ const catchAllPattern = fileScope === '/' ? '/:__notFound+' : `${fileScope}/:__notFound+`;
62
+ const pageId = dirs.length === 0 ? '404' : `${dirs.join('/')}/404`;
63
+ entries.push({
64
+ routePattern: catchAllPattern,
65
+ treePosition: catchAllPattern,
66
+ filePath: file.absolutePath,
67
+ exportName: 'default',
68
+ kind: 'notFound',
69
+ pageId,
70
+ params: [{ name: '__notFound', optional: false, array: false }],
71
+ fileScope,
72
+ pathlessGroups,
73
+ });
74
+ }
75
+ else {
76
+ const isIndex = fileInfo.isIndex;
77
+ const basePath = isIndex ? fileScope : joinPath(fileScope, fileName);
78
+ const pages = await safeExtractPages(file, moduleLoader);
79
+ if (pages.length === 0) {
80
+ // No createPage() — plain component
81
+ entries.push({
82
+ routePattern: basePath,
83
+ treePosition: basePath,
84
+ filePath: file.absolutePath,
85
+ exportName: 'default',
86
+ kind: 'page',
87
+ params: [],
88
+ fileScope,
89
+ pathlessGroups,
90
+ });
91
+ }
92
+ else {
93
+ for (const page of pages) {
94
+ const pageId = derivePageId(dirs, fileName, isIndex, page.exportName);
95
+ const defaultPattern = page.isDefault ? basePath : joinPath(basePath, page.exportName);
96
+ const routePattern = page.route ?? defaultPattern;
97
+ entries.push({
98
+ routePattern,
99
+ treePosition: defaultPattern,
100
+ filePath: file.absolutePath,
101
+ exportName: page.exportName,
102
+ kind: 'page',
103
+ pageId,
104
+ params: page.params,
105
+ fileScope,
106
+ pathlessGroups,
107
+ });
108
+ }
109
+ }
110
+ }
111
+ }
112
+ return entries;
113
+ }
114
+ function buildTreeFromEntries(entries) {
9
115
  const root = {
10
116
  segment: '',
11
117
  fullPath: '/',
@@ -15,167 +121,178 @@ export async function buildFileRouteTree(files, moduleLoader) {
15
121
  isPathlessGroup: false,
16
122
  children: [],
17
123
  };
18
- for (const file of files) {
19
- await insertFile(root, file, moduleLoader);
20
- }
21
- sortChildren(root);
22
- if (root.isLayout && root.filePath) {
23
- return [root];
24
- }
25
- return root.children;
26
- }
27
- async function insertFile(root, file, moduleLoader) {
28
- const ext = path.extname(file.relativePath);
29
- const withoutExt = file.relativePath.slice(0, -ext.length);
30
- const parts = withoutExt.split(path.sep);
31
- const fileName = parts.pop();
32
- const dirs = parts;
33
- let current = root;
34
- let currentPath = '';
35
- for (const dir of dirs) {
36
- const dirInfo = parseDirName(dir);
37
- const segmentPath = dirInfo.isPathlessGroup
38
- ? currentPath
39
- : joinPath(currentPath, dirInfo.segment);
40
- let child = current.children.find(c => c.segment === dirInfo.segment && c.isPathlessGroup === dirInfo.isPathlessGroup && c.isLayout);
41
- if (!child) {
42
- child = current.children.find(c => c.segment === dirInfo.segment && c.isPathlessGroup === dirInfo.isPathlessGroup && !c.filePath);
43
- }
44
- if (!child) {
45
- child = {
46
- segment: dirInfo.segment,
47
- fullPath: segmentPath || '/',
48
- isLayout: false,
124
+ const layouts = entries.filter(e => e.kind === 'layout');
125
+ const pages = entries.filter(e => e.kind !== 'layout');
126
+ // Sort layouts: shorter routePattern first, non-pathless before pathless
127
+ layouts.sort((a, b) => {
128
+ if (a.routePattern.length !== b.routePattern.length)
129
+ return a.routePattern.length - b.routePattern.length;
130
+ if (a.pathlessGroupId && !b.pathlessGroupId)
131
+ return 1;
132
+ if (!a.pathlessGroupId && b.pathlessGroupId)
133
+ return -1;
134
+ return 0;
135
+ });
136
+ // Insert layouts into tree
137
+ // Track all layout nodes for page assignment
138
+ const layoutRefs = [{ node: root }];
139
+ for (const layout of layouts) {
140
+ if (layout.pathlessGroupId) {
141
+ // Pathless group layout — find parent by walking layoutRefs, respecting pathless group chain
142
+ const parent = findParentForPathlessGroupLayout(layoutRefs, layout);
143
+ const node = {
144
+ segment: '',
145
+ fullPath: layout.treePosition,
146
+ filePath: layout.filePath,
147
+ isLayout: true,
49
148
  isIndex: false,
50
149
  isNotFound: false,
51
- isPathlessGroup: dirInfo.isPathlessGroup,
150
+ isPathlessGroup: true,
52
151
  children: [],
53
152
  };
54
- current.children.push(child);
153
+ parent.node.children.push(node);
154
+ layoutRefs.push({ node, pathlessGroupId: layout.pathlessGroupId });
55
155
  }
56
- current = child;
57
- currentPath = segmentPath;
58
- }
59
- const fileInfo = parseFileName(fileName);
60
- if (fileInfo.isLayout) {
61
- current.isLayout = true;
62
- current.filePath = file.absolutePath;
63
- }
64
- else if (fileInfo.isNotFound) {
65
- const catchAllSegment = ':__notFound+';
66
- const fullPath = joinPath(currentPath, catchAllSegment);
67
- const pageId = dirs.length === 0 ? '404' : `${dirs.join('/')}/404`;
68
- const pageExports = [{
69
- pageId,
70
- exportName: 'default',
71
- routePattern: fullPath,
72
- params: [{ name: '__notFound', optional: false, array: false }],
73
- }];
74
- const notFoundNode = {
75
- segment: catchAllSegment,
76
- fullPath,
77
- filePath: file.absolutePath,
78
- isLayout: false,
79
- isIndex: false,
80
- isNotFound: true,
81
- isPathlessGroup: false,
82
- pageExports,
83
- children: [],
84
- };
85
- current.children.push(notFoundNode);
86
- }
87
- else if (fileInfo.isIndex) {
88
- const fullPath = currentPath || '/';
89
- const allExports = await extractPageExportsFromFile(file, dirs, '', true, currentPath, moduleLoader);
90
- const defaultExports = allExports?.filter(e => e.exportName === 'default');
91
- const namedExports = allExports?.filter(e => e.exportName !== 'default') ?? [];
92
- const hasDefault = defaultExports != null && defaultExports.length > 0;
93
- const indexNode = {
94
- segment: '',
95
- fullPath,
96
- filePath: hasDefault ? file.absolutePath : undefined,
97
- exportName: hasDefault ? 'default' : undefined,
98
- isLayout: false,
99
- isIndex: true,
100
- isNotFound: false,
101
- isPathlessGroup: false,
102
- pageExports: hasDefault ? defaultExports : undefined,
103
- children: [],
104
- };
105
- current.children.push(indexNode);
106
- // Named exports become siblings (children of current, not of the index node)
107
- for (const exp of namedExports) {
108
- const namedSegment = exp.routePattern ? (computeRelativeSegment(currentPath, exp.routePattern) ?? exp.exportName) : exp.exportName;
109
- checkCollision(current.children, namedSegment, file.absolutePath, exp.exportName);
110
- current.children.push({
111
- segment: namedSegment,
112
- fullPath: joinPath(currentPath, namedSegment),
113
- filePath: file.absolutePath,
114
- exportName: exp.exportName,
115
- isLayout: false,
116
- isIndex: false,
117
- isNotFound: false,
118
- isPathlessGroup: false,
119
- pageExports: [exp],
120
- children: [],
121
- });
156
+ else if (layout.treePosition === '/' && !root.filePath) {
157
+ // Root layout
158
+ root.isLayout = true;
159
+ root.filePath = layout.filePath;
122
160
  }
123
- }
124
- else {
125
- const allExports = await extractPageExportsFromFile(file, dirs, fileName, false, currentPath, moduleLoader);
126
- const defaultExports = allExports?.filter(e => e.exportName === 'default');
127
- const namedExports = allExports?.filter(e => e.exportName !== 'default') ?? [];
128
- const hasDefault = defaultExports != null && defaultExports.length > 0;
129
- const routeSegment = hasDefault ? deriveSegmentFromPageExports(defaultExports, currentPath) : undefined;
130
- const segment = routeSegment ?? fileInfo.segment;
131
- const fullPath = joinPath(currentPath, segment);
132
- if (hasDefault) {
133
- checkCollision(current.children, segment, file.absolutePath, 'default');
161
+ else if (layout.treePosition === '/') {
162
+ // Additional layout at root (shouldn't happen normally, but handle)
163
+ root.isLayout = true;
164
+ root.filePath = layout.filePath;
134
165
  }
135
- // Reuse existing container node (created by a previous file's named exports) if available
136
- let routeNode = !hasDefault ? current.children.find(c => c.segment === segment && !c.filePath && !c.isLayout && !c.isPathlessGroup) : undefined;
137
- if (!routeNode) {
138
- routeNode = {
166
+ else {
167
+ // Regular layout — find parent by prefix matching
168
+ const parent = findDeepestLayoutParent(layoutRefs, layout.treePosition, layout.pathlessGroups);
169
+ const segment = computeSegmentFromParent(parent.node.fullPath, layout.treePosition);
170
+ const node = {
139
171
  segment,
140
- fullPath,
141
- filePath: hasDefault ? file.absolutePath : undefined,
142
- exportName: hasDefault ? 'default' : undefined,
143
- isLayout: false,
172
+ fullPath: layout.treePosition,
173
+ filePath: layout.filePath,
174
+ isLayout: true,
144
175
  isIndex: false,
145
176
  isNotFound: false,
146
177
  isPathlessGroup: false,
147
- pageExports: hasDefault ? defaultExports : undefined,
148
178
  children: [],
149
179
  };
150
- current.children.push(routeNode);
180
+ parent.node.children.push(node);
181
+ layoutRefs.push({ node });
151
182
  }
152
- // Named exports become children (equivalent to files in a subdirectory)
153
- for (const exp of namedExports) {
154
- const namedSegment = exp.routePattern ? (computeRelativeSegment(fullPath, exp.routePattern) ?? exp.exportName) : exp.exportName;
155
- checkCollision(routeNode.children, namedSegment, file.absolutePath, exp.exportName);
156
- routeNode.children.push({
157
- segment: namedSegment,
158
- fullPath: joinPath(fullPath, namedSegment),
159
- filePath: file.absolutePath,
160
- exportName: exp.exportName,
183
+ }
184
+ // Insert pages into tree (using file-hierarchy position, not route pattern)
185
+ for (const entry of pages) {
186
+ const parent = findDeepestLayoutParent(layoutRefs, entry.treePosition, entry.pathlessGroups);
187
+ const isIndex = entry.treePosition === parent.node.fullPath;
188
+ const segment = isIndex ? '' : computeSegmentFromParent(parent.node.fullPath, entry.treePosition);
189
+ const pageExports = entry.pageId
190
+ ? [{
191
+ pageId: entry.pageId,
192
+ exportName: entry.exportName,
193
+ routePattern: entry.routePattern,
194
+ params: entry.params,
195
+ }]
196
+ : undefined;
197
+ // For named exports from the same file as an existing node, check collision
198
+ if (!isIndex) {
199
+ checkCollision(parent.node.children, segment, entry.filePath, entry.exportName);
200
+ }
201
+ // Try to reuse an existing container node (e.g., from a directory that has no _layout.tsx)
202
+ const existing = !isIndex
203
+ ? parent.node.children.find(c => c.segment === segment && !c.filePath && !c.isLayout && !c.isPathlessGroup)
204
+ : undefined;
205
+ if (existing) {
206
+ existing.filePath = entry.filePath;
207
+ existing.exportName = entry.exportName;
208
+ existing.pageExports = pageExports;
209
+ }
210
+ else {
211
+ parent.node.children.push({
212
+ segment,
213
+ fullPath: entry.treePosition,
214
+ filePath: entry.filePath,
215
+ exportName: entry.exportName,
161
216
  isLayout: false,
162
- isIndex: false,
163
- isNotFound: false,
217
+ isIndex,
218
+ isNotFound: entry.kind === 'notFound',
164
219
  isPathlessGroup: false,
165
- pageExports: [exp],
220
+ pageExports,
166
221
  children: [],
167
222
  });
168
223
  }
169
224
  }
225
+ // Sort children recursively
226
+ sortChildren(root);
227
+ if (root.isLayout && root.filePath) {
228
+ return [root];
229
+ }
230
+ return root.children;
170
231
  }
232
+ /**
233
+ * Find the parent layout for a pathless group layout.
234
+ * The parent is the deepest layout at the same routePattern level,
235
+ * considering the pathless group nesting chain.
236
+ */
237
+ function findParentForPathlessGroupLayout(layoutRefs, entry) {
238
+ // The parent is the layout whose pathlessGroupId is the previous entry in the chain,
239
+ // or the deepest non-pathless layout at the same routePattern if this is the first group.
240
+ const groupChain = entry.pathlessGroups;
241
+ const thisGroupIndex = groupChain.indexOf(entry.pathlessGroupId);
242
+ if (thisGroupIndex > 0) {
243
+ // Has a parent pathless group — find it
244
+ const parentGroupId = groupChain[thisGroupIndex - 1];
245
+ const parentRef = layoutRefs.find(r => r.pathlessGroupId === parentGroupId);
246
+ if (parentRef)
247
+ return parentRef;
248
+ }
249
+ // First pathless group in chain (or parent not found) — find the deepest regular layout at prefix
250
+ let best = layoutRefs[0]; // root
251
+ for (const ref of layoutRefs) {
252
+ if (ref.pathlessGroupId)
253
+ continue; // skip other pathless groups
254
+ if (isPathPrefixOrEqual(ref.node.fullPath, entry.routePattern) && ref.node.fullPath.length >= best.node.fullPath.length) {
255
+ best = ref;
256
+ }
257
+ }
258
+ return best;
259
+ }
260
+ /**
261
+ * Find the deepest layout whose routePattern is a prefix of the given pattern.
262
+ * Respects pathless group membership.
263
+ */
264
+ function findDeepestLayoutParent(layoutRefs, routePattern, pathlessGroups) {
265
+ let best = layoutRefs[0]; // root
266
+ for (const ref of layoutRefs) {
267
+ if (!isPathPrefixOrEqual(ref.node.fullPath, routePattern))
268
+ continue;
269
+ // For pathless groups, only match if the entry belongs to this group
270
+ if (ref.pathlessGroupId && !pathlessGroups.includes(ref.pathlessGroupId))
271
+ continue;
272
+ // Prefer deeper matches. For ties (pathless groups at same depth), prefer pathless group
273
+ // that the entry belongs to over non-pathless.
274
+ if (ref.node.fullPath.length > best.node.fullPath.length) {
275
+ best = ref;
276
+ }
277
+ else if (ref.node.fullPath.length === best.node.fullPath.length && ref.pathlessGroupId && pathlessGroups.includes(ref.pathlessGroupId)) {
278
+ best = ref;
279
+ }
280
+ }
281
+ return best;
282
+ }
283
+ function isPathPrefixOrEqual(prefix, path) {
284
+ if (prefix === '/')
285
+ return true;
286
+ return path === prefix || path.startsWith(prefix + '/');
287
+ }
288
+ function computeSegmentFromParent(parentFullPath, childFullPath) {
289
+ if (parentFullPath === '/')
290
+ return childFullPath.slice(1);
291
+ return childFullPath.slice(parentFullPath.length + 1);
292
+ }
293
+ // ─── Helpers ────────────────────────────────────────────────────────────────
171
294
  /**
172
295
  * Derive page ID from file path and export name.
173
- *
174
- * Examples:
175
- * - File: project.tsx, export: detail → "project/detail"
176
- * - File: project.tsx, export: default → "project"
177
- * - File: project/detail.tsx, export: default → "project/detail"
178
- * - File: index.tsx, export: default → "index"
179
296
  */
180
297
  function derivePageId(dirs, fileName, isIndex, exportName) {
181
298
  const segments = [...dirs];
@@ -190,50 +307,14 @@ function derivePageId(dirs, fileName, isIndex, exportName) {
190
307
  const base = segments.join('/');
191
308
  return exportName === 'default' ? base : `${base}/${exportName}`;
192
309
  }
193
- /**
194
- * Compute the relative route segment from a page's .route() pattern and parent path.
195
- */
196
- function computeRelativeSegment(parentPath, routePattern) {
197
- const prefix = parentPath === '/' ? '/' : parentPath + '/';
198
- if (routePattern.startsWith(prefix)) {
199
- return routePattern.slice(prefix.length);
200
- }
201
- if (routePattern === parentPath) {
202
- return undefined;
203
- }
204
- const lastSlash = routePattern.lastIndexOf('/');
205
- return lastSlash >= 0 ? routePattern.slice(lastSlash + 1) : routePattern;
206
- }
207
- function deriveSegmentFromPageExports(pageExports, parentPath) {
208
- if (!pageExports || pageExports.length === 0)
209
- return undefined;
210
- const firstRoute = pageExports[0].routePattern;
211
- return computeRelativeSegment(parentPath, firstRoute);
212
- }
213
- async function extractPageExportsFromFile(file, dirs, fileName, isIndex, parentPath, moduleLoader) {
214
- let pages;
310
+ async function safeExtractPages(file, moduleLoader) {
215
311
  try {
216
- pages = await extractPages(file.absolutePath, moduleLoader);
312
+ return await extractPages(file.absolutePath, moduleLoader);
217
313
  }
218
- catch {
219
- return undefined;
314
+ catch (error) {
315
+ console.warn(`[buzola] Failed to extract pages from ${file.relativePath}:`, error instanceof Error ? error.message : error);
316
+ return [];
220
317
  }
221
- if (pages.length === 0)
222
- return undefined;
223
- const result = [];
224
- for (const page of pages) {
225
- const pageId = derivePageId(dirs, fileName, isIndex, page.exportName);
226
- // If no explicit .route(), derive from file path — all params become query params
227
- const basePath = isIndex ? (parentPath || '/') : joinPath(parentPath, fileName);
228
- const routePattern = page.route ?? (page.isDefault ? basePath : joinPath(basePath, page.exportName));
229
- result.push({
230
- pageId,
231
- exportName: page.exportName,
232
- routePattern,
233
- params: page.params,
234
- });
235
- }
236
- return result.length > 0 ? result : undefined;
237
318
  }
238
319
  function checkCollision(siblings, segment, filePath, exportName) {
239
320
  const existing = siblings.find(c => c.segment === segment && !c.isLayout && !c.isPathlessGroup);
@@ -253,21 +334,27 @@ function sortChildren(node) {
253
334
  }
254
335
  node.children.sort((a, b) => sortWeight(a) - sortWeight(b));
255
336
  }
337
+ const SORT_INDEX = 0;
338
+ const SORT_STATIC = 1;
339
+ const SORT_DYNAMIC = 2;
340
+ const SORT_CATCHALL = 3;
341
+ const SORT_NOT_FOUND = 4;
256
342
  function sortWeight(node) {
257
343
  if (node.isIndex)
258
- return 0;
344
+ return SORT_INDEX;
259
345
  if (node.isNotFound)
260
- return 4;
346
+ return SORT_NOT_FOUND;
261
347
  if (node.segment.includes(':') && node.segment.includes('+'))
262
- return 3;
348
+ return SORT_CATCHALL;
263
349
  if (node.segment.includes(':'))
264
- return 2;
265
- return 1;
350
+ return SORT_DYNAMIC;
351
+ return SORT_STATIC;
266
352
  }
267
353
  function joinPath(parent, child) {
268
354
  if (!child)
269
355
  return parent || '/';
270
- const base = parent || '';
271
- return `${base}/${child}`;
356
+ if (!parent || parent === '/')
357
+ return `/${child}`;
358
+ return `${parent}/${child}`;
272
359
  }
273
360
  //# sourceMappingURL=tree-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree-builder.js","sourceRoot":"","sources":["../../src/generator/tree-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tree-builder.js","sourceRoot":"","sources":["../../src/generator/tree-builder.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- export { buzolaPlugin } from './plugin';
2
- export type { BuzolaPluginOptions } from './plugin';
3
- export { scanRouteFiles } from './generator/scanner';
4
- export type { ScannedFile } from './generator/scanner';
5
- export { buildFileRouteTree } from './generator/tree-builder';
6
- export type { FileRouteNode, PageExportInfo } from './generator/tree-builder';
7
- export { generateRouteModule } from './generator/codegen';
8
- export type { CodegenOptions } from './generator/codegen';
9
- export { extractPages } from './generator/page-extractor';
10
- export type { ExtractedPage, ExtractedParam, ModuleLoader } from './generator/page-extractor';
11
- export { isRouteFile, parseDirName, parseFileName, parseRouteFile } from './conventions';
12
- export type { ParsedRouteFile } from './conventions';
1
+ export { buzolaPlugin } from './plugin.js';
2
+ export type { BuzolaPluginOptions } from './plugin.js';
3
+ export { scanRouteFiles } from './generator/scanner.js';
4
+ export type { ScannedFile } from './generator/scanner.js';
5
+ export { buildFileRouteTree } from './generator/tree-builder.js';
6
+ export type { FileRouteNode, PageExportInfo } from './generator/tree-builder.js';
7
+ export { generateRouteModule } from './generator/codegen.js';
8
+ export type { CodegenOptions } from './generator/codegen.js';
9
+ export { extractPages } from './generator/page-extractor.js';
10
+ export type { ExtractedPage, ExtractedParam, ModuleLoader } from './generator/page-extractor.js';
11
+ export { isRouteFile, parseDirName, parseFileName, parseRouteFile } from './conventions.js';
12
+ export type { ParsedRouteFile } from './conventions.js';
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAE7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE7F,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACxF,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAEhG,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC3F,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- export { buzolaPlugin } from './plugin';
2
- export { scanRouteFiles } from './generator/scanner';
3
- export { buildFileRouteTree } from './generator/tree-builder';
4
- export { generateRouteModule } from './generator/codegen';
5
- export { extractPages } from './generator/page-extractor';
6
- export { isRouteFile, parseDirName, parseFileName, parseRouteFile } from './conventions';
1
+ export { buzolaPlugin } from './plugin.js';
2
+ export { scanRouteFiles } from './generator/scanner.js';
3
+ export { buildFileRouteTree } from './generator/tree-builder.js';
4
+ export { generateRouteModule } from './generator/codegen.js';
5
+ export { extractPages } from './generator/page-extractor.js';
6
+ export { isRouteFile, parseDirName, parseFileName, parseRouteFile } from './conventions.js';
7
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAG7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAGzD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAGhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAG5D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA"}
package/dist/plugin.d.ts CHANGED
@@ -1,5 +1,14 @@
1
1
  import type { Plugin } from 'vite';
2
2
  export interface BuzolaPluginOptions {
3
+ /**
4
+ * Unique name for this plugin instance. Required when registering multiple
5
+ * entrypoints in the same Vite config. Affects the plugin name
6
+ * (`buzola:${name}`) and the virtual module ID (`virtual:buzola/${name}/routes`).
7
+ *
8
+ * When omitted, the plugin uses `buzola` as its name and
9
+ * `virtual:buzola/routes` as the virtual module ID.
10
+ */
11
+ name?: string;
3
12
  /** Path to routes directory, relative to project root. Defaults to "src/routes". */
4
13
  routesDir?: string;
5
14
  /** Path to output generated file, relative to project root. Defaults to "src/buzola.gen.ts". */