@sealcode/sealgen 0.17.31 → 0.17.32
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/@types/src/generate-routes.d.ts +3 -0
- package/lib/generate-routes.js +10 -6
- package/package.json +1 -1
- package/src/generate-routes.ts +15 -13
package/lib/generate-routes.js
CHANGED
|
@@ -33,6 +33,11 @@ function generateURL(actionName, url) {
|
|
|
33
33
|
${actionName}URL.params = [${params.map((param) => `"${param}"`).join(",")}];
|
|
34
34
|
${actionName}URL.rawURL = "${encodeURI(url)}";`;
|
|
35
35
|
}
|
|
36
|
+
function sortRoutes(urls) {
|
|
37
|
+
return urls.sort(
|
|
38
|
+
({ url: url1 }, { url: url2 }) => url1.includes(":") ? 1 : url2.includes(":") ? -1 : url1 < url2 ? -1 : 1
|
|
39
|
+
);
|
|
40
|
+
}
|
|
36
41
|
async function generateRoutes() {
|
|
37
42
|
const files = await Promise.all(
|
|
38
43
|
(await walkDir(target_locreq.resolve("src/back/routes"))).filter(
|
|
@@ -60,7 +65,7 @@ import type Router from "@koa/router";
|
|
|
60
65
|
import { mount } from "@sealcode/sealgen";
|
|
61
66
|
import * as URLs from "./urls.js"
|
|
62
67
|
|
|
63
|
-
${files.map(
|
|
68
|
+
${sortRoutes(files).map(
|
|
64
69
|
({ actionName, fullpath }) => `import { default as ${actionName} } from "${importPath(
|
|
65
70
|
target_locreq.resolve("src/back/routes/routes.ts"),
|
|
66
71
|
fullpath
|
|
@@ -68,13 +73,11 @@ ${files.map(
|
|
|
68
73
|
).join("\n")}
|
|
69
74
|
|
|
70
75
|
export default function mountAutoRoutes(router: Router) {
|
|
71
|
-
${files.
|
|
72
|
-
({ url: url1 }, { url: url2 }) => url1.includes(":") ? 1 : url2.includes(":") ? -1 : url1 < url2 ? -1 : 1
|
|
73
|
-
).map(
|
|
76
|
+
${sortRoutes(files).map(
|
|
74
77
|
({ actionName }) => ` mount(router, URLs.${actionName}URL, ${actionName});`
|
|
75
78
|
).join("\n")}
|
|
76
79
|
}`;
|
|
77
|
-
const urls_content = `${files.sort(({ url: url1 }, { url: url2 }) => url1 < url2 ? -1 : 1).map(({ actionName, url }) => generateURL(actionName, url)).join("\n")}
|
|
80
|
+
const urls_content = `${sortRoutes(files).sort(({ url: url1 }, { url: url2 }) => url1 < url2 ? -1 : 1).map(({ actionName, url }) => generateURL(actionName, url)).join("\n")}
|
|
78
81
|
`;
|
|
79
82
|
const prettier_config = await getPrettierConfig();
|
|
80
83
|
await fs.writeFile(
|
|
@@ -91,6 +94,7 @@ ${files.sort(
|
|
|
91
94
|
}
|
|
92
95
|
export {
|
|
93
96
|
generateRoutes,
|
|
94
|
-
generateURL
|
|
97
|
+
generateURL,
|
|
98
|
+
sortRoutes
|
|
95
99
|
};
|
|
96
100
|
//# sourceMappingURL=generate-routes.js.map
|
package/package.json
CHANGED
package/src/generate-routes.ts
CHANGED
|
@@ -47,6 +47,18 @@ export function generateURL(actionName: string, url: string) {
|
|
|
47
47
|
${actionName}URL.rawURL = "${encodeURI(url)}";`;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
export function sortRoutes<T extends { url: string }>(urls: T[]): T[] {
|
|
51
|
+
return urls.sort(({ url: url1 }, { url: url2 }) =>
|
|
52
|
+
url1.includes(":") // make sure the parametrized ones come later, so the more concrete ones show up first. This is not a full solution, but works for single-parameter urls
|
|
53
|
+
? 1
|
|
54
|
+
: url2.includes(":")
|
|
55
|
+
? -1
|
|
56
|
+
: url1 < url2
|
|
57
|
+
? -1
|
|
58
|
+
: 1
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
50
62
|
export async function generateRoutes(): Promise<void> {
|
|
51
63
|
const files = await Promise.all(
|
|
52
64
|
(
|
|
@@ -84,7 +96,7 @@ import type Router from "@koa/router";
|
|
|
84
96
|
import { mount } from "@sealcode/sealgen";
|
|
85
97
|
import * as URLs from "./urls.js"
|
|
86
98
|
|
|
87
|
-
${files
|
|
99
|
+
${sortRoutes(files)
|
|
88
100
|
.map(
|
|
89
101
|
({ actionName, fullpath }) =>
|
|
90
102
|
`import { default as ${actionName} } from "${importPath(
|
|
@@ -95,17 +107,7 @@ ${files
|
|
|
95
107
|
.join("\n")}
|
|
96
108
|
|
|
97
109
|
export default function mountAutoRoutes(router: Router) {
|
|
98
|
-
${files
|
|
99
|
-
|
|
100
|
-
.sort(({ url: url1 }, { url: url2 }) =>
|
|
101
|
-
url1.includes(":") // make sure the parametrized ones come later, so the more concrete ones show up first. This is not a full solution, but works for single-parameter urls
|
|
102
|
-
? 1
|
|
103
|
-
: url2.includes(":")
|
|
104
|
-
? -1
|
|
105
|
-
: url1 < url2
|
|
106
|
-
? -1
|
|
107
|
-
: 1
|
|
108
|
-
)
|
|
110
|
+
${sortRoutes(files)
|
|
109
111
|
.map(
|
|
110
112
|
({ actionName }) =>
|
|
111
113
|
` mount(router, URLs.${actionName}URL, ${actionName});`
|
|
@@ -113,7 +115,7 @@ ${files
|
|
|
113
115
|
.join("\n")}
|
|
114
116
|
}`;
|
|
115
117
|
|
|
116
|
-
const urls_content = `${files
|
|
118
|
+
const urls_content = `${sortRoutes(files)
|
|
117
119
|
.sort(({ url: url1 }, { url: url2 }) => (url1 < url2 ? -1 : 1))
|
|
118
120
|
.map(({ actionName, url }) => generateURL(actionName, url))
|
|
119
121
|
.join("\n")}
|