@benjavicente/router-generator 1.166.24
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/LICENSE +21 -0
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/cjs/config.cjs +134 -0
- package/dist/cjs/config.cjs.map +1 -0
- package/dist/cjs/config.d.cts +254 -0
- package/dist/cjs/filesystem/physical/getRouteNodes.cjs +234 -0
- package/dist/cjs/filesystem/physical/getRouteNodes.cjs.map +1 -0
- package/dist/cjs/filesystem/physical/getRouteNodes.d.cts +25 -0
- package/dist/cjs/filesystem/physical/rootPathId.cjs +6 -0
- package/dist/cjs/filesystem/physical/rootPathId.cjs.map +1 -0
- package/dist/cjs/filesystem/physical/rootPathId.d.cts +1 -0
- package/dist/cjs/filesystem/virtual/config.cjs +39 -0
- package/dist/cjs/filesystem/virtual/config.cjs.map +1 -0
- package/dist/cjs/filesystem/virtual/config.d.cts +3 -0
- package/dist/cjs/filesystem/virtual/getRouteNodes.cjs +175 -0
- package/dist/cjs/filesystem/virtual/getRouteNodes.cjs.map +1 -0
- package/dist/cjs/filesystem/virtual/getRouteNodes.d.cts +9 -0
- package/dist/cjs/filesystem/virtual/loadConfigFile.cjs +12 -0
- package/dist/cjs/filesystem/virtual/loadConfigFile.cjs.map +1 -0
- package/dist/cjs/filesystem/virtual/loadConfigFile.d.cts +1 -0
- package/dist/cjs/generator.cjs +805 -0
- package/dist/cjs/generator.cjs.map +1 -0
- package/dist/cjs/generator.d.cts +116 -0
- package/dist/cjs/index.cjs +33 -0
- package/dist/cjs/index.d.cts +12 -0
- package/dist/cjs/logger.cjs +31 -0
- package/dist/cjs/logger.cjs.map +1 -0
- package/dist/cjs/logger.d.cts +10 -0
- package/dist/cjs/plugin/types.d.cts +18 -0
- package/dist/cjs/template.cjs +203 -0
- package/dist/cjs/template.cjs.map +1 -0
- package/dist/cjs/template.d.cts +34 -0
- package/dist/cjs/transform/transform.cjs +302 -0
- package/dist/cjs/transform/transform.cjs.map +1 -0
- package/dist/cjs/transform/transform.d.cts +4 -0
- package/dist/cjs/transform/types.d.cts +31 -0
- package/dist/cjs/transform/utils.cjs +34 -0
- package/dist/cjs/transform/utils.cjs.map +1 -0
- package/dist/cjs/transform/utils.d.cts +2 -0
- package/dist/cjs/types.d.cts +57 -0
- package/dist/cjs/utils.cjs +653 -0
- package/dist/cjs/utils.cjs.map +1 -0
- package/dist/cjs/utils.d.cts +212 -0
- package/dist/cjs/validate-route-params.cjs +73 -0
- package/dist/cjs/validate-route-params.cjs.map +1 -0
- package/dist/cjs/validate-route-params.d.cts +9 -0
- package/dist/esm/config.d.ts +254 -0
- package/dist/esm/config.js +129 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/filesystem/physical/getRouteNodes.d.ts +25 -0
- package/dist/esm/filesystem/physical/getRouteNodes.js +230 -0
- package/dist/esm/filesystem/physical/getRouteNodes.js.map +1 -0
- package/dist/esm/filesystem/physical/rootPathId.d.ts +1 -0
- package/dist/esm/filesystem/physical/rootPathId.js +6 -0
- package/dist/esm/filesystem/physical/rootPathId.js.map +1 -0
- package/dist/esm/filesystem/virtual/config.d.ts +3 -0
- package/dist/esm/filesystem/virtual/config.js +38 -0
- package/dist/esm/filesystem/virtual/config.js.map +1 -0
- package/dist/esm/filesystem/virtual/getRouteNodes.d.ts +9 -0
- package/dist/esm/filesystem/virtual/getRouteNodes.js +173 -0
- package/dist/esm/filesystem/virtual/getRouteNodes.js.map +1 -0
- package/dist/esm/filesystem/virtual/loadConfigFile.d.ts +1 -0
- package/dist/esm/filesystem/virtual/loadConfigFile.js +11 -0
- package/dist/esm/filesystem/virtual/loadConfigFile.js.map +1 -0
- package/dist/esm/generator.d.ts +116 -0
- package/dist/esm/generator.js +801 -0
- package/dist/esm/generator.js.map +1 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/logger.d.ts +10 -0
- package/dist/esm/logger.js +31 -0
- package/dist/esm/logger.js.map +1 -0
- package/dist/esm/plugin/types.d.ts +18 -0
- package/dist/esm/template.d.ts +34 -0
- package/dist/esm/template.js +202 -0
- package/dist/esm/template.js.map +1 -0
- package/dist/esm/transform/transform.d.ts +4 -0
- package/dist/esm/transform/transform.js +301 -0
- package/dist/esm/transform/transform.js.map +1 -0
- package/dist/esm/transform/types.d.ts +31 -0
- package/dist/esm/transform/utils.d.ts +2 -0
- package/dist/esm/transform/utils.js +34 -0
- package/dist/esm/transform/utils.js.map +1 -0
- package/dist/esm/types.d.ts +57 -0
- package/dist/esm/utils.d.ts +212 -0
- package/dist/esm/utils.js +609 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/validate-route-params.d.ts +9 -0
- package/dist/esm/validate-route-params.js +73 -0
- package/dist/esm/validate-route-params.js.map +1 -0
- package/package.json +82 -0
- package/src/config.ts +247 -0
- package/src/filesystem/physical/getRouteNodes.ts +541 -0
- package/src/filesystem/physical/rootPathId.ts +1 -0
- package/src/filesystem/virtual/config.ts +45 -0
- package/src/filesystem/virtual/getRouteNodes.ts +307 -0
- package/src/filesystem/virtual/loadConfigFile.ts +8 -0
- package/src/generator.ts +1686 -0
- package/src/index.ts +54 -0
- package/src/logger.ts +43 -0
- package/src/plugin/types.ts +18 -0
- package/src/template.ts +313 -0
- package/src/transform/transform.ts +534 -0
- package/src/transform/types.ts +39 -0
- package/src/transform/utils.ts +42 -0
- package/src/types.ts +74 -0
- package/src/utils.ts +1067 -0
- package/src/validate-route-params.ts +118 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { Logger } from './logger'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Regex for valid JavaScript identifier (param name)
|
|
5
|
+
* Must start with letter, underscore, or dollar sign
|
|
6
|
+
* Can contain letters, numbers, underscores, or dollar signs
|
|
7
|
+
*/
|
|
8
|
+
const VALID_PARAM_NAME_REGEX = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/
|
|
9
|
+
|
|
10
|
+
interface ExtractedParam {
|
|
11
|
+
/** The param name without $ prefix (e.g., "userId", "optional") */
|
|
12
|
+
paramName: string
|
|
13
|
+
/** Whether this param name is valid */
|
|
14
|
+
isValid: boolean
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Extracts param names from a route path segment.
|
|
19
|
+
*
|
|
20
|
+
* Handles these patterns:
|
|
21
|
+
* - $paramName -> extract "paramName"
|
|
22
|
+
* - {$paramName} -> extract "paramName"
|
|
23
|
+
* - prefix{$paramName}suffix -> extract "paramName"
|
|
24
|
+
* - {-$paramName} -> extract "paramName" (optional)
|
|
25
|
+
* - prefix{-$paramName}suffix -> extract "paramName" (optional)
|
|
26
|
+
* - $ or {$} -> wildcard, skip validation
|
|
27
|
+
*/
|
|
28
|
+
function extractParamsFromSegment(segment: string): Array<ExtractedParam> {
|
|
29
|
+
const params: Array<ExtractedParam> = []
|
|
30
|
+
|
|
31
|
+
// Skip empty segments
|
|
32
|
+
if (!segment || !segment.includes('$')) {
|
|
33
|
+
return params
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Check for wildcard ($ alone or {$})
|
|
37
|
+
if (segment === '$' || segment === '{$}') {
|
|
38
|
+
return params // Wildcard, no param name to validate
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Pattern 1: Simple $paramName (entire segment starts with $)
|
|
42
|
+
if (segment.startsWith('$') && !segment.includes('{')) {
|
|
43
|
+
const paramName = segment.slice(1)
|
|
44
|
+
if (paramName) {
|
|
45
|
+
params.push({
|
|
46
|
+
paramName,
|
|
47
|
+
isValid: VALID_PARAM_NAME_REGEX.test(paramName),
|
|
48
|
+
})
|
|
49
|
+
}
|
|
50
|
+
return params
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Pattern 2: Braces pattern {$paramName} or {-$paramName} with optional prefix/suffix
|
|
54
|
+
// Match patterns like: prefix{$param}suffix, {$param}, {-$param}
|
|
55
|
+
const bracePattern = /\{(-?\$)([^}]*)\}/g
|
|
56
|
+
let match
|
|
57
|
+
|
|
58
|
+
while ((match = bracePattern.exec(segment)) !== null) {
|
|
59
|
+
const paramName = match[2] // The param name after $ or -$
|
|
60
|
+
|
|
61
|
+
if (!paramName) {
|
|
62
|
+
// This is a wildcard {$} or {-$}, skip
|
|
63
|
+
continue
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
params.push({
|
|
67
|
+
paramName,
|
|
68
|
+
isValid: VALID_PARAM_NAME_REGEX.test(paramName),
|
|
69
|
+
})
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return params
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Extracts all params from a route path.
|
|
77
|
+
*
|
|
78
|
+
* @param path - The route path (e.g., "/users/$userId/posts/$postId")
|
|
79
|
+
* @returns Array of extracted params with validation info
|
|
80
|
+
*/
|
|
81
|
+
function extractParamsFromPath(path: string): Array<ExtractedParam> {
|
|
82
|
+
if (!path || !path.includes('$')) {
|
|
83
|
+
return []
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const segments = path.split('/')
|
|
87
|
+
const allParams: Array<ExtractedParam> = []
|
|
88
|
+
|
|
89
|
+
for (const segment of segments) {
|
|
90
|
+
const params = extractParamsFromSegment(segment)
|
|
91
|
+
allParams.push(...params)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return allParams
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Validates route params and logs warnings for invalid param names.
|
|
99
|
+
*
|
|
100
|
+
* @param routePath - The route path to validate
|
|
101
|
+
* @param filePath - The file path for error messages
|
|
102
|
+
* @param logger - Logger instance for warnings
|
|
103
|
+
*/
|
|
104
|
+
export function validateRouteParams(
|
|
105
|
+
routePath: string,
|
|
106
|
+
filePath: string,
|
|
107
|
+
logger: Logger,
|
|
108
|
+
): void {
|
|
109
|
+
const params = extractParamsFromPath(routePath)
|
|
110
|
+
const invalidParams = params.filter((p) => !p.isValid)
|
|
111
|
+
|
|
112
|
+
for (const param of invalidParams) {
|
|
113
|
+
logger.warn(
|
|
114
|
+
`WARNING: Invalid param name "${param.paramName}" in route "${routePath}" (file: ${filePath}). ` +
|
|
115
|
+
`Param names must be valid JavaScript identifiers (match /[a-zA-Z_$][a-zA-Z0-9_$]*/).`,
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
}
|