nuxt-typed-router
Advanced tools
Comparing version 0.2.7 to 0.2.8
@@ -33,86 +33,98 @@ "use strict"; | ||
const { filePath = `${this.options.srcDir}/__routes.js`, routesObjectName = 'routerPagesNames', stripAtFromName = false, } = { ...this.options.typedRouter, ...moduleOptions }; | ||
this.nuxt.hook('build:extendRoutes', async (routes) => { | ||
this.addPlugin({ | ||
src: path_1.default.resolve(__dirname, './templates/plugin.js'), | ||
fileName: 'nuxt-typed-router/plugin.js', | ||
}); | ||
this.nuxt.hook('build:extendRoutes', async (existingRoutes) => { | ||
try { | ||
this.extendRoutes(async (existingRoutes) => { | ||
let formatedRoutes; | ||
const recursiveMatch = (route, parent) => { | ||
var _a; | ||
if (route.path && route.path.startsWith('@') && !!parent) { | ||
route.path = route.path.split('@')[1]; | ||
if (stripAtFromName && route.name) { | ||
const [left, right] = (_a = route.name) === null || _a === void 0 ? void 0 : _a.split('@'); | ||
route.name = `${left}${right}`; | ||
let formatedRoutes = []; | ||
const recursiveMatch = (route, parent) => { | ||
var _a; | ||
if (route.path && route.path.startsWith('@') && !!parent) { | ||
route.path = route.path.split('@')[1]; | ||
if (stripAtFromName && route.name) { | ||
const [left, right] = (_a = route.name) === null || _a === void 0 ? void 0 : _a.split('@'); | ||
route.name = `${left}${right}`; | ||
} | ||
const parentsChildren = parent.children; | ||
if (parentsChildren) { | ||
let defaultName = null; | ||
if (route.name) { | ||
defaultName = route.name; | ||
} | ||
const parentsChildren = parent.children; | ||
if (parentsChildren) { | ||
let defaultName = null; | ||
if (route.name) { | ||
defaultName = route.name; | ||
else if (route.children) { | ||
const child = route.children.find((f) => f.path === ''); | ||
if (child) { | ||
defaultName = child.name; | ||
} | ||
else if (route.children) { | ||
const child = route.children.find((f) => f.path === ''); | ||
if (child) { | ||
defaultName = child.name; | ||
} | ||
} | ||
else { | ||
defaultName = null; | ||
} | ||
parentsChildren.push({ | ||
path: '', | ||
name: `${parent.name}-index`, | ||
redirect: { | ||
...(defaultName && { name: defaultName }), | ||
...(!defaultName && { path: route.path }), | ||
}, | ||
}); | ||
} | ||
else { | ||
defaultName = null; | ||
} | ||
parentsChildren.push({ | ||
path: '', | ||
name: `${parent.name}-index`, | ||
redirect: { | ||
...(defaultName && { name: defaultName }), | ||
...(!defaultName && { path: route.path }), | ||
}, | ||
}); | ||
} | ||
if (route.children) { | ||
route.children.forEach((child) => recursiveMatch(child, route)); | ||
} | ||
}; | ||
existingRoutes.map((route) => recursiveMatch(route)); | ||
formatedRoutes = existingRoutes; | ||
let routesObject = '{'; | ||
const recursiveTypedRoutes = (route, level) => { | ||
const routeName = route.name; | ||
if (route.children) { | ||
const [parentName, parentName2] = route.path.split('/'); | ||
routesObject += `${lodash_1.camelCase(parentName || parentName2 || 'index')}:{`; | ||
route.children.map((r) => recursiveTypedRoutes(r, level + 1)); | ||
routesObject += '},'; | ||
} | ||
else if (routeName) { | ||
let splitted = routeName.split('-'); | ||
splitted = splitted.slice(level, splitted.length); | ||
routesObject += `'${lodash_1.camelCase(splitted.join('-')) || 'index'}': '${routeName}',`; | ||
} | ||
}; | ||
formatedRoutes.map((r) => recursiveTypedRoutes(r, 0)); | ||
routesObject += '}'; | ||
const template = `export const ${routesObjectName} = ${routesObject};`; | ||
const templateForLocal = `export default ${routesObject};`; | ||
try { | ||
let prettierFoundOptions = await prettier.resolveConfig(process.cwd()); | ||
if (!prettierFoundOptions) { | ||
prettierFoundOptions = require('../.prettierrc'); | ||
} | ||
const formatedModelsFile = prettier.format(template, { | ||
...prettierFoundOptions, | ||
parser: 'typescript', | ||
}); | ||
const savePath = path_1.default.resolve(process.cwd(), filePath); | ||
await fs_1.default.writeFileSync(savePath, formatedModelsFile); | ||
await fs_1.default.writeFileSync(path_1.default.resolve(__dirname, '../types/generated.js'), templateForLocal); | ||
console.log(log_symbols_1.default.success, `Route definition file generated at ${chalk_1.default.blue(savePath)}`); | ||
this.addPlugin({ | ||
src: path_1.default.resolve(__dirname, './templates/nuxt-typed-router.js'), | ||
}); | ||
} | ||
catch (e) { | ||
console.error(chalk_1.default.red('Error while saving route definitions file'), '\n' + e); | ||
if (route.children) { | ||
route.children.forEach((child) => recursiveMatch(child, route)); | ||
} | ||
return formatedRoutes; | ||
}); | ||
}; | ||
existingRoutes.map((route) => recursiveMatch(route)); | ||
formatedRoutes = existingRoutes; | ||
let routesObjectString = '{'; | ||
let routeObjectJs = {}; | ||
const recursiveTypedRoutes = (route, level, routeObject) => { | ||
const routeName = route.name; | ||
if (route.children) { | ||
const [parentName, parentName2] = route.path.split('/'); | ||
const nameKey = lodash_1.camelCase(parentName || parentName2 || 'index'); | ||
routesObjectString += `${nameKey}:{`; | ||
routeObject[nameKey] = {}; | ||
route.children.map((r) => recursiveTypedRoutes(r, level + 1, routeObject[nameKey])); | ||
routesObjectString += '},'; | ||
} | ||
else if (routeName) { | ||
let splitted = routeName.split('-'); | ||
splitted = splitted.slice(level, splitted.length); | ||
const keyName = lodash_1.camelCase(splitted.join('-')) || 'index'; | ||
routesObjectString += `'${keyName}': '${routeName}',`; | ||
routeObject[keyName] = routeName; | ||
} | ||
}; | ||
formatedRoutes.map((r) => recursiveTypedRoutes(r, 0, routeObjectJs)); | ||
routesObjectString += '}'; | ||
const templateRoutes = `export const ${routesObjectName} = ${routesObjectString};`; | ||
const templateForLocal = `export default ${routesObjectString};`; | ||
try { | ||
let prettierFoundOptions = await prettier.resolveConfig(process.cwd()); | ||
if (!prettierFoundOptions) { | ||
prettierFoundOptions = require('../.prettierrc'); | ||
} | ||
const formatedModelsFile = prettier.format(templateRoutes, { | ||
...prettierFoundOptions, | ||
parser: 'typescript', | ||
}); | ||
const savePath = path_1.default.resolve(process.cwd(), filePath); | ||
await fs_1.default.writeFileSync(savePath, formatedModelsFile); | ||
console.log(log_symbols_1.default.success, `Route definition file generated at ${chalk_1.default.blue(savePath)}`); | ||
await fs_1.default.writeFileSync(path_1.default.resolve(__dirname, '../types/generated.ts'), templateForLocal); | ||
await fs_1.default.writeFileSync(path_1.default.resolve(__dirname, './templates/generated.js'), templateForLocal); | ||
this.addTemplate({ | ||
src: path_1.default.resolve(__dirname, './templates/generated.js'), | ||
fileName: 'nuxt-typed-router/generated.js', | ||
}); | ||
console.log(log_symbols_1.default.success, `${chalk_1.default.cyan('$routeNames')} updated ${chalk_1.default.blue(savePath)}`); | ||
this.extendRoutes(async () => { | ||
return formatedRoutes; | ||
}); | ||
} | ||
catch (e) { | ||
console.error(chalk_1.default.red('Error while saving route definitions file'), '\n' + e); | ||
} | ||
} | ||
@@ -119,0 +131,0 @@ catch (e) { |
{ | ||
"name": "nuxt-typed-router", | ||
"version": "0.2.7", | ||
"version": "0.2.8", | ||
"description": "Provide autocompletion for pages route names generated by Nuxt router", | ||
"main": "lib/module.js", | ||
"author": "Victor Garcia <victorgarciaparis13@gmail.com>", | ||
"license": "MIT", | ||
"keywords": [ | ||
@@ -18,3 +16,5 @@ "nuxt typed router", | ||
"dev": "tsc -p ./tsconfig.json --pretty --watch", | ||
"build": "tsc -p ./tsconfig.json --pretty", | ||
"build": "rimraf lib && rimraf types && tsc -p ./tsconfig.json --pretty", | ||
"postbuild": "yarn run copy-files", | ||
"copy-files": "copyfiles -u 1 ./src/**/*.js ./lib", | ||
"prepublish": "yarn build" | ||
@@ -54,2 +54,4 @@ }, | ||
"@types/prettier": "^2.1.5", | ||
"copyfiles": "^2.4.0", | ||
"rimraf": "^3.0.2", | ||
"typescript": "^4.1.2", | ||
@@ -56,0 +58,0 @@ "vue-router": "^3.4.9" |
15687
159
8
10