nuxt-typed-router 1.2.3-beta.0 → 1.2.4
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 +1 -2
- package/dist/module.json +1 -1
- package/dist/module.mjs +69 -46
- package/dist/types.d.ts +1 -1
- package/package.json +24 -25
package/README.md
CHANGED
|
@@ -58,7 +58,7 @@ First, register the module in the `nuxt.config.ts`
|
|
|
58
58
|
|
|
59
59
|
```ts
|
|
60
60
|
export default defineNuxtConfig({
|
|
61
|
-
|
|
61
|
+
modules: ['nuxt-typed-router'],
|
|
62
62
|
nuxtTypedRouter: {
|
|
63
63
|
// options
|
|
64
64
|
},
|
|
@@ -190,7 +190,6 @@ It's available anywhere you have access to Nuxt context
|
|
|
190
190
|
```vue
|
|
191
191
|
<script lang="ts">
|
|
192
192
|
import { defineComponent } from 'vue';
|
|
193
|
-
import { useNuxtApp } from '#app';
|
|
194
193
|
|
|
195
194
|
export default defineComponent({
|
|
196
195
|
name: 'Index',
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { extendPages,
|
|
1
|
+
import { extendPages, defineNuxtModule } from '@nuxt/kit';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import logSymbols from 'log-symbols';
|
|
4
4
|
import prettier from 'prettier';
|
|
@@ -96,13 +96,17 @@ const routeParamExtractRegxp = /:(\w+)/;
|
|
|
96
96
|
function extractRouteParamsFromPath(path, previousParams) {
|
|
97
97
|
const params = path.match(routeParamExtractRegxp) ?? [];
|
|
98
98
|
params?.shift();
|
|
99
|
-
let allMergedParams = params.map(
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
99
|
+
let allMergedParams = params.map(
|
|
100
|
+
(m) => ({
|
|
101
|
+
key: m,
|
|
102
|
+
type: "string | number",
|
|
103
|
+
required: true
|
|
104
|
+
})
|
|
105
|
+
);
|
|
104
106
|
if (previousParams?.length) {
|
|
105
|
-
allMergedParams = allMergedParams.concat(
|
|
107
|
+
allMergedParams = allMergedParams.concat(
|
|
108
|
+
previousParams.map((m) => ({ ...m, required: false }))
|
|
109
|
+
);
|
|
106
110
|
}
|
|
107
111
|
return allMergedParams;
|
|
108
112
|
}
|
|
@@ -165,15 +169,17 @@ function walkThoughRoutes({
|
|
|
165
169
|
output.routesObjectTemplate += `${nameKey}:{`;
|
|
166
170
|
output.routesDeclTemplate += `"${nameKey}":{`;
|
|
167
171
|
const allRouteParams = extractRouteParamsFromPath(route.path, previousParams);
|
|
168
|
-
childrenChunks?.map(
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
172
|
+
childrenChunks?.map(
|
|
173
|
+
(routeConfig, index) => walkThoughRoutes({
|
|
174
|
+
route: routeConfig,
|
|
175
|
+
level: level + 1,
|
|
176
|
+
siblings: extractUnMatchingSiblings(route, siblings),
|
|
177
|
+
parentName: nameKey,
|
|
178
|
+
previousParams: allRouteParams,
|
|
179
|
+
output,
|
|
180
|
+
isLast: isItemLast(childrenChunks, index)
|
|
181
|
+
})
|
|
182
|
+
);
|
|
177
183
|
output.routesObjectTemplate += "},";
|
|
178
184
|
output.routesDeclTemplate += `}${isLast ? "" : ","}`;
|
|
179
185
|
} else if (route.name) {
|
|
@@ -226,7 +232,7 @@ const staticDeclarations = `
|
|
|
226
232
|
TypedLocationAsRelativeRaw<T> &
|
|
227
233
|
RouteLocationOptions;
|
|
228
234
|
|
|
229
|
-
|
|
235
|
+
interface _TypedRouter {
|
|
230
236
|
/**
|
|
231
237
|
* Remove an existing route by its name.
|
|
232
238
|
*
|
|
@@ -273,19 +279,10 @@ const staticDeclarations = `
|
|
|
273
279
|
to: TypedRouteLocationRaw<T>
|
|
274
280
|
): Promise<NavigationFailure | void | undefined>;
|
|
275
281
|
}
|
|
276
|
-
|
|
277
|
-
declare module 'nuxt/dist/app/nuxt' {
|
|
278
|
-
export interface NuxtApp {
|
|
279
|
-
$typedRouter: TypedRouter;
|
|
280
|
-
$routesList: RouteListDecl;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
282
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
$routesList: RouteListDecl;
|
|
288
|
-
}
|
|
283
|
+
export interface TypedRouter extends _TypedRouter {}
|
|
284
|
+
declare global {
|
|
285
|
+
export interface TypedRouter extends _TypedRouter {}
|
|
289
286
|
}
|
|
290
287
|
`;
|
|
291
288
|
|
|
@@ -294,13 +291,14 @@ function createRuntimePluginFile(routesDeclTemplate) {
|
|
|
294
291
|
${signatureTemplate}
|
|
295
292
|
import { defineNuxtPlugin } from '#app';
|
|
296
293
|
|
|
297
|
-
export default defineNuxtPlugin((
|
|
294
|
+
export default defineNuxtPlugin(() => {
|
|
295
|
+
const router = useRouter();
|
|
298
296
|
const routesList = ${routesDeclTemplate};
|
|
299
297
|
|
|
300
298
|
return {
|
|
301
299
|
provide: {
|
|
302
|
-
typedRouter:
|
|
303
|
-
routesList
|
|
300
|
+
typedRouter: router as TypedRouter,
|
|
301
|
+
routesList,
|
|
304
302
|
},
|
|
305
303
|
};
|
|
306
304
|
});
|
|
@@ -379,9 +377,11 @@ function createTypedRouteListExport(routesList) {
|
|
|
379
377
|
}
|
|
380
378
|
function createTypedRouteParamsExport(routesParams) {
|
|
381
379
|
return `export type TypedRouteParams = {
|
|
382
|
-
${routesParams.map(
|
|
380
|
+
${routesParams.map(
|
|
381
|
+
({ name, params }) => `"${name}": ${params.length ? `{
|
|
383
382
|
${params.map(({ key, required, type }) => `"${key}"${required ? "" : "?"}: ${type}`).join(",\n")}
|
|
384
|
-
}` : "never"}`
|
|
383
|
+
}` : "never"}`
|
|
384
|
+
).join(",\n")}
|
|
385
385
|
}`;
|
|
386
386
|
}
|
|
387
387
|
|
|
@@ -390,24 +390,47 @@ function routeHook(outDir, routesObjectName, srcDir, nuxt) {
|
|
|
390
390
|
extendPages(async (routes) => {
|
|
391
391
|
if (routes.length) {
|
|
392
392
|
const { routesDeclTemplate, routesList, routesObjectTemplate, routesParams } = constructRouteMap(routes);
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
const
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
393
|
+
const pluginName = "__typed-router.ts";
|
|
394
|
+
nuxt.hook("build:done", async () => {
|
|
395
|
+
const pluginFolder = `${srcDir}/plugins`;
|
|
396
|
+
await saveRouteFiles(
|
|
397
|
+
pluginFolder,
|
|
398
|
+
srcDir,
|
|
399
|
+
pluginName,
|
|
400
|
+
createRuntimePluginFile(routesDeclTemplate)
|
|
401
|
+
);
|
|
401
402
|
});
|
|
402
403
|
await Promise.all([
|
|
403
|
-
saveRouteFiles(
|
|
404
|
-
|
|
405
|
-
|
|
404
|
+
saveRouteFiles(
|
|
405
|
+
outDir,
|
|
406
|
+
srcDir,
|
|
407
|
+
"__useTypedRouter.ts",
|
|
408
|
+
createRuntimeHookFile(routesDeclTemplate)
|
|
409
|
+
),
|
|
410
|
+
saveRouteFiles(
|
|
411
|
+
outDir,
|
|
412
|
+
srcDir,
|
|
413
|
+
`__routes.ts`,
|
|
414
|
+
createRuntimeRoutesFile({ routesList, routesObjectTemplate, routesObjectName })
|
|
415
|
+
),
|
|
416
|
+
saveRouteFiles(
|
|
417
|
+
outDir,
|
|
418
|
+
srcDir,
|
|
419
|
+
`typed-router.d.ts`,
|
|
420
|
+
createDeclarationRoutesFile({ routesDeclTemplate, routesList, routesParams })
|
|
421
|
+
),
|
|
406
422
|
saveRouteFiles(outDir, srcDir, "index.ts", createRuntimeIndexFile())
|
|
407
423
|
]);
|
|
408
424
|
console.log(logSymbols.success, `[typed-router] Routes definitions generated`);
|
|
409
425
|
} else {
|
|
410
|
-
console.log(
|
|
426
|
+
console.log(
|
|
427
|
+
logSymbols.warning,
|
|
428
|
+
chalk.yellow(
|
|
429
|
+
`[typed-router] No routes defined. Check if your ${chalk.underline(
|
|
430
|
+
chalk.bold("pages")
|
|
431
|
+
)} folder exists and remove ${chalk.underline(chalk.bold("app.vue"))}`
|
|
432
|
+
)
|
|
433
|
+
);
|
|
411
434
|
}
|
|
412
435
|
});
|
|
413
436
|
} catch (e) {
|
package/dist/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,30 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nuxt-typed-router",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
4
4
|
"description": "Provide autocompletion for pages route names generated by Nuxt router",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
"play:build": "nuxi build playground",
|
|
9
|
-
"prepack": "nuxt-module-build",
|
|
10
|
-
"build:local": "nuxt-module-build --stub && cross-env NUXT_BUILD_TYPE=stub nuxi dev playground",
|
|
11
|
-
"init:build": "nuxt-module-build --stub && nuxi prepare playground",
|
|
12
|
-
"build:test": "cross-env NUXT_BUILD_TYPE=stub yarn prepack && yarn play:build",
|
|
13
|
-
"test": "yarn build:test && vitest run",
|
|
14
|
-
"test:watch": "yarn build:test && vitest"
|
|
15
|
-
},
|
|
6
|
+
"main": "./dist/module.cjs",
|
|
7
|
+
"types": "./main.d.ts",
|
|
16
8
|
"exports": {
|
|
17
9
|
".": {
|
|
18
10
|
"import": "./dist/module.mjs",
|
|
19
11
|
"require": "./dist/module.cjs"
|
|
20
12
|
}
|
|
21
13
|
},
|
|
22
|
-
"main": "./dist/module.cjs",
|
|
23
|
-
"types": "./main.d.ts",
|
|
24
14
|
"files": [
|
|
25
15
|
"dist",
|
|
26
16
|
"main.d.ts"
|
|
27
17
|
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"prepack": "nuxt-module-build",
|
|
20
|
+
"dev": "nuxi dev playground",
|
|
21
|
+
"dev:build": "nuxi build playground",
|
|
22
|
+
"dev:prepare": "nuxt-module-build --stub && nuxi prepare playground",
|
|
23
|
+
"build:test": "cross-env NUXT_BUILD_TYPE=stub yarn prepack && yarn dev:build",
|
|
24
|
+
"test": "yarn build:test && vitest run",
|
|
25
|
+
"test:watch": "yarn build:test && vitest"
|
|
26
|
+
},
|
|
28
27
|
"publishConfig": {
|
|
29
28
|
"access": "public"
|
|
30
29
|
},
|
|
@@ -51,28 +50,28 @@
|
|
|
51
50
|
"url": "https://github.com/victorgarciaesgi/nuxt-typed-router/issues"
|
|
52
51
|
},
|
|
53
52
|
"dependencies": {
|
|
54
|
-
"@nuxt/kit": "
|
|
55
|
-
"chalk": "^
|
|
53
|
+
"@nuxt/kit": "3.0.0",
|
|
54
|
+
"chalk": "^5.2.0",
|
|
56
55
|
"lodash-es": "^4.17.21",
|
|
57
56
|
"log-symbols": "^5.1.0",
|
|
58
57
|
"mkdirp": "^1.0.4",
|
|
59
|
-
"pathe": "
|
|
60
|
-
"prettier": "
|
|
58
|
+
"pathe": "1.0.0",
|
|
59
|
+
"prettier": "2.8.1"
|
|
61
60
|
},
|
|
62
61
|
"devDependencies": {
|
|
63
|
-
"@nuxt/module-builder": "
|
|
62
|
+
"@nuxt/module-builder": "^0.2.1",
|
|
64
63
|
"@nuxt/types": "^2.15.8",
|
|
65
|
-
"@nuxtjs/eslint-config-typescript": "
|
|
64
|
+
"@nuxtjs/eslint-config-typescript": "^12.0.0",
|
|
66
65
|
"@types/lodash-es": "^4.17.6",
|
|
67
66
|
"@types/mkdirp": "^1.0.2",
|
|
68
67
|
"@types/node": "^17.0.23",
|
|
69
|
-
"@types/prettier": "^2.7.
|
|
68
|
+
"@types/prettier": "^2.7.2",
|
|
70
69
|
"cross-env": "^7.0.3",
|
|
71
|
-
"eslint": "8.
|
|
70
|
+
"eslint": "8.30.0",
|
|
72
71
|
"eslint-config-prettier": "^8.5.0",
|
|
73
|
-
"nuxt": "
|
|
74
|
-
"typescript": "^4.
|
|
75
|
-
"vitest": "^0.
|
|
76
|
-
"vue-router": "^4.1.
|
|
72
|
+
"nuxt": "3.0.0",
|
|
73
|
+
"typescript": "^4.9.4",
|
|
74
|
+
"vitest": "^0.26.1",
|
|
75
|
+
"vue-router": "^4.1.6"
|
|
77
76
|
}
|
|
78
77
|
}
|