victorgarciaesgi / nuxt-typed-router

🚦Provide autocompletion and typecheck to Nuxt router
https://nuxt-typed-router.vercel.app
MIT License
345 stars 12 forks source link

Bad template generation with i18n module #135

Open skmd87 opened 5 months ago

skmd87 commented 5 months ago

Describe the bug Nuxt won't start when i18n is enabled. the following errors printed in console:

 ERROR(vue-tsc)  ';' expected.
 FILE  C:/www/nuxt3-boilerplate/.nuxt/typed-router/__paths.d.ts:23:8

    21 |
    22 |
  > 23 |   type ValidStringPath<T> = T extends ${string} ${string} ? false : T extends '' ? false : true;
       |        ^^^^^^^^^^^^^^^
    24 |
    25 |   type ValidParam<T, R extends boolean = true> = T extends ${infer A}/${infer B}
    26 |   ? A extends ${string} ${string}

 ERROR(vue-tsc)  ';' expected.
 FILE  C:/www/nuxt3-boilerplate/.nuxt/typed-router/__paths.d.ts:23:31

    21 |
    22 |
  > 23 |   type ValidStringPath<T> = T extends ${string} ${string} ? false : T extends '' ? false : true;
       |                               ^^^^^^^
    24 |
    25 |   type ValidParam<T, R extends boolean = true> = T extends ${infer A}/${infer B}
    26 |   ? A extends ${string} ${string}

 ERROR(vue-tsc)  ';' expected.
 FILE  C:/www/nuxt3-boilerplate/.nuxt/typed-router/__paths.d.ts:23:73

    21 |
    22 |
  > 23 |   type ValidStringPath<T> = T extends ${string} ${string} ? false : T extends '' ? false : true;
       |                                                                         ^^^^^^^
    24 |
    25 |   type ValidParam<T, R extends boolean = true> = T extends ${infer A}/${infer B}
    26 |   ? A extends ${string} ${string}

 ERROR(vue-tsc)  Type expected.
 FILE  C:/www/nuxt3-boilerplate/.nuxt/typed-router/__paths.d.ts:91:13

    89 |       ? T extends '/'
    90 |         ? "index"
  > 91 |          :  : never
       |             ^
    92 |        : never;
    93 |
    94 |

 ERROR(vue-tsc)  Declaration or statement expected.
 FILE  C:/www/nuxt3-boilerplate/.nuxt/typed-router/__paths.d.ts:92:8

    90 |         ? "index"
    91 |          :  : never
  > 92 |        : never;
       |        ^
    93 |
    94 |
    95 |

 ERROR(vue-tsc)  ';' expected.
 FILE  C:/www/nuxt3-boilerplate/.nuxt/typed-router/__routes.ts:27:10

    25 |    *
    26 |    * */
  > 27 |   export type RoutesParamsRecord = {
       |          ^^^^
    28 |
    29 |   }
    30 |

 ERROR(vue-tsc)  ';' expected.
 FILE  C:/www/nuxt3-boilerplate/.nuxt/typed-router/__routes.ts:54:10

    52 |    * By default the params are unknown
    53 |    * */
  > 54 |   export type RoutesNamedLocationsResolved =
       |          ^^^^
    55 |   {
    56 |     name: RoutesNamesList;
    57 |     params: unknown;

 ERROR(vue-tsc)  Function type notation must be parenthesized when used in an intersection type.
 FILE  C:/www/nuxt3-boilerplate/.nuxt/typed-router/__routes.ts:58:6

    56 |     name: RoutesNamesList;
    57 |     params: unknown;
  > 58 |   } & (
       |      ^^
  > 59 |
       | ^^^^
  > 60 |       )
       | ^^^^
  > 61 |
       | ^^^^
  > 62 |
       | ^^^^
  > 63 |     export type RoutesNamesListRecord = {};
       | ^^^^^^^^^^^
    64 |
    65 |     export const routesNames = {};
    66 |

 ERROR(vue-tsc)  '=>' expected.
 FILE  C:/www/nuxt3-boilerplate/.nuxt/typed-router/__routes.ts:63:5

    61 |
    62 |
  > 63 |     export type RoutesNamesListRecord = {};
       |     ^^^^^^
    64 |
    65 |     export const routesNames = {};
    66 |

 ERROR(vue-tsc)  ';' expected.
 FILE  C:/www/nuxt3-boilerplate/.nuxt/typed-router/__routes.ts:63:12

    61 |
    62 |
  > 63 |     export type RoutesNamesListRecord = {};
       |            ^^^^
    64 |
    65 |     export const routesNames = {};
    66 |

[vue-tsc] Found 10 errors. Watching for file changes.

Expected behavior to run nuxt normally

Screenshots upon checking the generated .ts files, found those problems: __paths d ts-1 __paths d ts-2 __routes d ts-1 __routes d ts-2

Environnement infos

pages
├── admin │ └── index.vue └── index.vue

Your nuxt.config.ts

modules: [ '@pinia/nuxt', ['@nuxtjs/eslint-module', eslintConfig], ['@nuxtjs/i18n', i18nConfig], '@formkit/auto-animate', '@vueuse/nuxt', ['@nuxt/image', imageConfig], ['nuxt-simple-sitemap', sitemapConfig], ['nuxt-jsonld', jsonldConfig], ['nuxt-simple-robots', robotsConfig], 'nuxt-typed-router', ['@vite-pwa/nuxt', pwaConfig], ],

//i18n config import { type ModuleOptions } from '@nuxtjs/i18n'

const config: ModuleOptions = { defaultLocale: 'en-US', langDir: 'config/i18n/locales/', locales: [ { code: 'en', iso: 'en-US', file: 'en-US.json', }, { code: 'ar', iso: 'ar-JO', file: 'ar-JO.json', }, ], lazy: true,
strategy: 'prefix' }

export default config

victorgarciaesgi commented 5 months ago

Hi! Yeah there is a problem I spotted with the "prefix" strategy i'm sorry for this. I'll have to refactor a significant part of stuff on 4.0 and it's already in progress

skmd87 commented 5 months ago

looks promsing, is there any beta version yet?

victorgarciaesgi commented 5 months ago

Not yet it's not usable, i'll tell you when it's ready. But i'll surely will change how i18n types will work

mseeley commented 3 months ago

I'm also running into the same error. Error is different but still traces to strategy: 'prefix' and nuxt-typed-router.

$ pnpm nuxi prepare

 ERROR  Declaration or statement expected. (158:8)                                                                                                                                                     8:46:52 PM
  156 |         ? "index"
  157 |          : any : never
> 158 |        : never;
      |        ^
  159 |
  160 |
  161 |

    156 |         ? "index"
    157 |          : any : never
  > 158 |        : never;
        |        ^
    159 |
    160 |
    161 |
mseeley commented 3 months ago

What is the roadmap for this module when contrasted with Nuxt's experimental integration of unplugin-vue-router?

danwithabox commented 3 months ago

I second that question. For people ending up here thinking they'd have to use this module to get typed routes, I have successfully started using the experimental.typedPages option with i18n.

To me, that option seems to be the canonic approach, even if it's marked as experimental.

skmd87 commented 6 hours ago

I second that question. For people ending up here thinking they'd have to use this module to get typed routes, I have successfully started using the experimental.typedPages option with i18n.

To me, that option seems to be the canonic approach, even if it's marked as experimental.

How did you enable i18n tying with experimental.typedPages ??