intlayer 8.9.1 → 8.9.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/routing/index.ts"],"sourcesContent":["import type {\n RewriteObject,\n RewriteRule,\n RewriteRules,\n} from '@intlayer/types/config';\nimport type { StrictModeLocaleMap } from '@intlayer/types/module_augmentation';\n\nconst buildRules = (\n rules: Record<string, StrictModeLocaleMap<string>>,\n processor: (pattern: string) => string\n): RewriteRules => ({\n rules: Object.entries(rules).map(([canonical, localized]) => ({\n canonical: processor(canonical),\n localized: Object.fromEntries(\n Object.entries(localized).map(([locale, pattern]) => [\n locale,\n pattern ? processor(pattern) : pattern,\n ])\n ) as StrictModeLocaleMap<string>,\n })) as RewriteRule[],\n});\n\nconst cleanPath = (pattern: string) =>\n pattern.startsWith('/') ? pattern : `/${pattern}`;\n\n/**\n * Standardizes pattern to :param syntax.\n * Supports:\n * - Next.js/SvelteKit/Nuxt: [slug], [...slug], [[slug]]\n * - TanStack Router: $slug\n * - Solid Router: *slug\n * - React/Vue Router: :slug, *\n */\nconst normalizePattern = (pattern: string, framework?: string) => {\n let normalized = pattern;\n\n if (framework === 'nextjs') {\n normalized = normalized\n .replace(/\\[\\[\\.\\.\\.([^\\]]+)\\]\\]/g, ':$1*') // [[...slug]] -> :slug* (0+)\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, ':$1+') // [...slug] -> :slug+ (1+)\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [slug] -> :slug (1)\n } else if (framework === 'sveltekit') {\n normalized = normalized\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, ':$1*') // [...path] -> :path* (0+)\n .replace(/\\[\\[([^\\]]+)\\]\\]/g, ':$1?') // [[optional]] -> :optional? (0-1)\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [slug] -> :slug (1)\n } else if (framework === 'nuxt') {\n normalized = normalized\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, ':$1*') // [...slug] -> :slug* (0+)\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [slug] -> :slug (1)\n } else {\n // Default / Generic (React Router, Vue Router, Solid Router, TanStack Router)\n normalized = normalized\n .replace(/\\$([^/]+)/g, ':$1') // TanStack $slug -> :slug\n .replace(/\\*([^/]+)/g, ':$1*') // Solid *slug -> :slug*\n .replace(/:([^/]+)\\?/g, ':$1?') // Vue Router/React Router :slug? -> :slug?\n .replace(/\\*/g, ':path*'); // React Router * -> :path*\n }\n\n return normalized;\n};\n\n/**\n * Removes locale markers from the pattern.\n */\nconst stripLocale = (pattern: string) =>\n pattern\n .replace(/\\/?(:locale|\\[locale\\]|\\$locale)\\/?/g, '/')\n .replace(/\\/+/g, '/')\n .replace(/\\/$/, '') || '/';\n\n/**\n * Factory to create formatters that populate 'url' and a specific proxy key.\n */\nconst createFormatter =\n (proxyKey: 'nextjs' | 'vite', framework?: string) =>\n <T extends string = string>(\n rules: Record<T, Partial<StrictModeLocaleMap<string>>>\n ): RewriteObject => {\n const normalize = (pattern: string) => normalizePattern(pattern, framework);\n const strip = (pattern: string) => stripLocale(normalize(pattern));\n\n return {\n url: buildRules(rules as any, (pattern) => cleanPath(strip(pattern))),\n [proxyKey]: buildRules(rules as any, (pattern) =>\n cleanPath(normalize(pattern))\n ),\n } as RewriteObject;\n };\n\n/**\n * Formatter for Next.js style rewrites.\n * Patterns use Next.js dynamic routing syntax:\n * - Slug: `[slug]`\n * - Catch-all: `[...slug]` (1+)\n * - Optional catch-all: `[[...slug]]` (0+)\n * - Locale: `[locale]`\n */\nexport const nextjsRewrite = createFormatter('nextjs', 'nextjs');\n\n/**\n * Formatter for SvelteKit style rewrites.\n * Patterns use SvelteKit dynamic routing syntax:\n * - Slug: `[slug]`\n * - Catch-all: `[...slug]` (0+)\n * - Locale: `[locale]`\n */\nexport const svelteKitRewrite = createFormatter('vite', 'sveltekit');\n\n/**\n * Formatter for React Router style rewrites.\n * Patterns use React Router dynamic routing syntax:\n * - Slug: `:slug`\n * - Optional slug: `:slug?`\n * - Catch-all: `*`\n * - Locale: `:locale`\n */\nexport const reactRouterRewrite = createFormatter('vite');\n\n/**\n * Formatter for Vue style rewrites.\n * Patterns use Vue Router 4 dynamic routing syntax:\n * - Slug: `:slug`\n * - Optional slug: `:slug?`\n * - Catch-all: `:slug*` or `:slug+`\n * - Locale: `:locale`\n */\nexport const vueRouterRewrite = createFormatter('vite');\n\n/**\n * Formatter for Solid Router style rewrites.\n * Patterns use Solid Router dynamic routing syntax:\n * - Slug: `:slug`\n * - Catch-all: `*slug`\n * - Locale: `:locale`\n */\nexport const solidRouterRewrite = createFormatter('vite');\n\n/**\n * Formatter for Nuxt style rewrites.\n * Patterns use Nuxt 3 dynamic routing syntax:\n * - Slug: `[slug]`\n * - Catch-all: `[...slug]` (0+)\n * - Locale: `[locale]`\n */\nexport const nuxtRewrite = createFormatter('vite', 'nuxt');\n\n/**\n * Formatter for TanStack Router style rewrites.\n * Patterns use TanStack Router dynamic routing syntax:\n * - Slug: `$slug`\n * - Catch-all: `*`\n * - Locale: `$locale`\n */\nexport const tanstackRouterRewrite = createFormatter('vite');\n\n/**\n * Generic formatter for Vite-based projects.\n * Supports most dynamic routing syntaxes and normalizes them for the Vite proxy.\n */\nexport const viteRewrite = createFormatter('vite');\n"],"mappings":";;;AAOA,MAAM,cACJ,OACA,eACkB,EAClB,OAAO,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,WAAW,gBAAgB;CAC5D,WAAW,UAAU,UAAU;CAC/B,WAAW,OAAO,YAChB,OAAO,QAAQ,UAAU,CAAC,KAAK,CAAC,QAAQ,aAAa,CACnD,QACA,UAAU,UAAU,QAAQ,GAAG,QAChC,CAAC,CACH;CACF,EAAE,EACJ;AAED,MAAM,aAAa,YACjB,QAAQ,WAAW,IAAI,GAAG,UAAU,IAAI;;;;;;;;;AAU1C,MAAM,oBAAoB,SAAiB,cAAuB;CAChE,IAAI,aAAa;AAEjB,KAAI,cAAc,UAAU;AAC1B,eAAa,WACV,QAAQ,2BAA2B,OAAO,CAC1C,QAAQ,uBAAuB,OAAO,CACtC,QAAQ,iBAAiB,MAAM;YACzB,cAAc,aAAa;AACpC,eAAa,WACV,QAAQ,uBAAuB,OAAO,CACtC,QAAQ,qBAAqB,OAAO,CACpC,QAAQ,iBAAiB,MAAM;YACzB,cAAc,QAAQ;AAC/B,eAAa,WACV,QAAQ,uBAAuB,OAAO,CACtC,QAAQ,iBAAiB,MAAM;QAC7B;AAEL,eAAa,WACV,QAAQ,cAAc,MAAM,CAC5B,QAAQ,cAAc,OAAO,CAC7B,QAAQ,eAAe,OAAO,CAC9B,QAAQ,OAAO,SAAS;;AAG7B,QAAO;;;;;AAMT,MAAM,eAAe,YACnB,QACG,QAAQ,wCAAwC,IAAI,CACpD,QAAQ,QAAQ,IAAI,CACpB,QAAQ,OAAO,GAAG,IAAI;;;;AAK3B,MAAM,mBACH,UAA6B,eAE5B,UACkB;CAClB,MAAM,aAAa,YAAoB,iBAAiB,SAAS,UAAU;CAC3E,MAAM,SAAS,YAAoB,YAAY,UAAU,QAAQ,CAAC;AAElE,QAAO;EACL,KAAK,WAAW,QAAe,YAAY,UAAU,MAAM,QAAQ,CAAC,CAAC;GACpE,WAAW,WAAW,QAAe,YACpC,UAAU,UAAU,QAAQ,CAAC,CAC9B;EACF;;;;;;;;;;AAWL,MAAa,gBAAgB,gBAAgB,UAAU,SAAS;;;;;;;;AAShE,MAAa,mBAAmB,gBAAgB,QAAQ,YAAY;;;;;;;;;AAUpE,MAAa,qBAAqB,gBAAgB,OAAO;;;;;;;;;AAUzD,MAAa,mBAAmB,gBAAgB,OAAO;;;;;;;;AASvD,MAAa,qBAAqB,gBAAgB,OAAO;;;;;;;;AASzD,MAAa,cAAc,gBAAgB,QAAQ,OAAO;;;;;;;;AAS1D,MAAa,wBAAwB,gBAAgB,OAAO;;;;;AAM5D,MAAa,cAAc,gBAAgB,OAAO"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/routing/index.ts"],"sourcesContent":["import type {\n RewriteObject,\n RewriteRule,\n RewriteRules,\n} from '@intlayer/types/config';\nimport type { StrictModeLocaleMap } from '@intlayer/types/module_augmentation';\n\nconst buildRules = (\n rules: Record<string, StrictModeLocaleMap<string>>,\n processor: (pattern: string) => string\n): RewriteRules => ({\n rules: Object.entries(rules).map(([canonical, localized]) => ({\n canonical: processor(canonical),\n localized: Object.fromEntries(\n Object.entries(localized).map(([locale, pattern]) => [\n locale,\n pattern ? processor(pattern) : pattern,\n ])\n ) as StrictModeLocaleMap<string>,\n })) as RewriteRule[],\n});\n\nconst cleanPath = (pattern: string) =>\n pattern.startsWith('/') ? pattern : `/${pattern}`;\n\n/**\n * Standardizes pattern to :param syntax.\n * Supports:\n * - Next.js/SvelteKit/Nuxt: [slug], [...slug], [[slug]]\n * - TanStack Router: $slug\n * - Solid Router: *slug\n * - React/Vue Router: :slug, *\n */\nconst normalizePattern = (pattern: string, framework?: string) => {\n let normalized = pattern;\n\n if (framework === 'nextjs') {\n normalized = normalized\n .replace(/\\[\\[\\.\\.\\.([^\\]]+)\\]\\]/g, ':$1*') // [[...slug]] -> :slug* (0+)\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, ':$1+') // [...slug] -> :slug+ (1+)\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [slug] -> :slug (1)\n } else if (framework === 'sveltekit') {\n normalized = normalized\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, ':$1*') // [...path] -> :path* (0+)\n .replace(/\\[\\[([^\\]]+)\\]\\]/g, ':$1?') // [[optional]] -> :optional? (0-1)\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [slug] -> :slug (1)\n } else if (framework === 'nuxt') {\n normalized = normalized\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, ':$1*') // [...slug] -> :slug* (0+)\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [slug] -> :slug (1)\n } else {\n // Default / Generic (React Router, Vue Router, Solid Router, TanStack Router)\n normalized = normalized\n .replace(/\\$([^/]+)/g, ':$1') // TanStack $slug -> :slug\n .replace(/\\*([^/]+)/g, ':$1*') // Solid *slug -> :slug*\n .replace(/:([^/]+)\\?/g, ':$1?') // Vue Router/React Router :slug? -> :slug?\n .replace(/\\*/g, ':path*'); // React Router * -> :path*\n }\n\n return normalized;\n};\n\n/**\n * Removes locale markers from the pattern.\n */\nconst stripLocale = (pattern: string) =>\n pattern\n .replace(/\\/?(:locale|\\[locale\\]|\\$locale)\\/?/g, '/')\n .replace(/\\/+/g, '/')\n .replace(/\\/$/, '') || '/';\n\n/**\n * Factory to create formatters that populate 'url' and a specific proxy key.\n */\nconst createFormatter =\n (proxyKey: 'nextjs' | 'vite', framework?: string) =>\n <T extends string = string>(\n rules: Record<T, Partial<StrictModeLocaleMap<string>>>\n ): RewriteObject => {\n const normalize = (pattern: string) => normalizePattern(pattern, framework);\n const strip = (pattern: string) => stripLocale(normalize(pattern));\n\n return {\n url: buildRules(rules as any, (pattern) => cleanPath(strip(pattern))),\n [proxyKey]: buildRules(rules as any, (pattern) =>\n cleanPath(normalize(pattern))\n ),\n } as RewriteObject;\n };\n\n/**\n * Formatter for Next.js style rewrites.\n * Patterns use Next.js dynamic routing syntax:\n * - Slug: `[slug]`\n * - Catch-all: `[...slug]` (1+)\n * - Optional catch-all: `[[...slug]]` (0+)\n * - Locale: `[locale]`\n */\nexport const nextjsRewrite = createFormatter('nextjs', 'nextjs');\n\n/**\n * Formatter for SvelteKit style rewrites.\n * Patterns use SvelteKit dynamic routing syntax:\n * - Slug: `[slug]`\n * - Catch-all: `[...slug]` (0+)\n * - Locale: `[locale]`\n */\nexport const svelteKitRewrite = createFormatter('vite', 'sveltekit');\n\n/**\n * Formatter for React Router style rewrites.\n * Patterns use React Router dynamic routing syntax:\n * - Slug: `:slug`\n * - Optional slug: `:slug?`\n * - Catch-all: `*`\n * - Locale: `:locale`\n */\nexport const reactRouterRewrite = createFormatter('vite');\n\n/**\n * Formatter for Vue style rewrites.\n * Patterns use Vue Router 4 dynamic routing syntax:\n * - Slug: `:slug`\n * - Optional slug: `:slug?`\n * - Catch-all: `:slug*` or `:slug+`\n * - Locale: `:locale`\n */\nexport const vueRouterRewrite = createFormatter('vite');\n\n/**\n * Formatter for Solid Router style rewrites.\n * Patterns use Solid Router dynamic routing syntax:\n * - Slug: `:slug`\n * - Catch-all: `*slug`\n * - Locale: `:locale`\n */\nexport const solidRouterRewrite = createFormatter('vite');\n\n/**\n * Formatter for Nuxt style rewrites.\n * Patterns use Nuxt 3 dynamic routing syntax:\n * - Slug: `[slug]`\n * - Catch-all: `[...slug]` (0+)\n * - Locale: `[locale]`\n */\nexport const nuxtRewrite = createFormatter('vite', 'nuxt');\n\n/**\n * Formatter for TanStack Router style rewrites.\n * Patterns use TanStack Router dynamic routing syntax:\n * - Slug: `$slug`\n * - Catch-all: `*`\n * - Locale: `$locale`\n */\nexport const tanstackRouterRewrite = createFormatter('vite');\n\n/**\n * Generic formatter for Vite-based projects.\n * Supports most dynamic routing syntaxes and normalizes them for the Vite proxy.\n */\nexport const viteRewrite = createFormatter('vite');\n"],"mappings":";;;AAOA,MAAM,cACJ,OACA,eACkB,EAClB,OAAO,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,WAAW,gBAAgB;CAC5D,WAAW,UAAU,UAAU;CAC/B,WAAW,OAAO,YAChB,OAAO,QAAQ,UAAU,CAAC,KAAK,CAAC,QAAQ,aAAa,CACnD,QACA,UAAU,UAAU,QAAQ,GAAG,QAChC,CAAC,CACH;CACF,EAAE,EACJ;AAED,MAAM,aAAa,YACjB,QAAQ,WAAW,IAAI,GAAG,UAAU,IAAI;;;;;;;;;AAU1C,MAAM,oBAAoB,SAAiB,cAAuB;CAChE,IAAI,aAAa;CAEjB,IAAI,cAAc,UAAU;EAC1B,aAAa,WACV,QAAQ,2BAA2B,OAAO,CAC1C,QAAQ,uBAAuB,OAAO,CACtC,QAAQ,iBAAiB,MAAM;QAC7B,IAAI,cAAc,aAAa;EACpC,aAAa,WACV,QAAQ,uBAAuB,OAAO,CACtC,QAAQ,qBAAqB,OAAO,CACpC,QAAQ,iBAAiB,MAAM;QAC7B,IAAI,cAAc,QAAQ;EAC/B,aAAa,WACV,QAAQ,uBAAuB,OAAO,CACtC,QAAQ,iBAAiB,MAAM;QAC7B;EAEL,aAAa,WACV,QAAQ,cAAc,MAAM,CAC5B,QAAQ,cAAc,OAAO,CAC7B,QAAQ,eAAe,OAAO,CAC9B,QAAQ,OAAO,SAAS;;CAG7B,OAAO;;;;;AAMT,MAAM,eAAe,YACnB,QACG,QAAQ,wCAAwC,IAAI,CACpD,QAAQ,QAAQ,IAAI,CACpB,QAAQ,OAAO,GAAG,IAAI;;;;AAK3B,MAAM,mBACH,UAA6B,eAE5B,UACkB;CAClB,MAAM,aAAa,YAAoB,iBAAiB,SAAS,UAAU;CAC3E,MAAM,SAAS,YAAoB,YAAY,UAAU,QAAQ,CAAC;CAElE,OAAO;EACL,KAAK,WAAW,QAAe,YAAY,UAAU,MAAM,QAAQ,CAAC,CAAC;GACpE,WAAW,WAAW,QAAe,YACpC,UAAU,UAAU,QAAQ,CAAC,CAC9B;EACF;;;;;;;;;;AAWL,MAAa,gBAAgB,gBAAgB,UAAU,SAAS;;;;;;;;AAShE,MAAa,mBAAmB,gBAAgB,QAAQ,YAAY;;;;;;;;;AAUpE,MAAa,qBAAqB,gBAAgB,OAAO;;;;;;;;;AAUzD,MAAa,mBAAmB,gBAAgB,OAAO;;;;;;;;AASvD,MAAa,qBAAqB,gBAAgB,OAAO;;;;;;;;AASzD,MAAa,cAAc,gBAAgB,QAAQ,OAAO;;;;;;;;AAS1D,MAAa,wBAAwB,gBAAgB,OAAO;;;;;AAM5D,MAAa,cAAc,gBAAgB,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/routing/index.ts"],"sourcesContent":["import type {\n RewriteObject,\n RewriteRule,\n RewriteRules,\n} from '@intlayer/types/config';\nimport type { StrictModeLocaleMap } from '@intlayer/types/module_augmentation';\n\nconst buildRules = (\n rules: Record<string, StrictModeLocaleMap<string>>,\n processor: (pattern: string) => string\n): RewriteRules => ({\n rules: Object.entries(rules).map(([canonical, localized]) => ({\n canonical: processor(canonical),\n localized: Object.fromEntries(\n Object.entries(localized).map(([locale, pattern]) => [\n locale,\n pattern ? processor(pattern) : pattern,\n ])\n ) as StrictModeLocaleMap<string>,\n })) as RewriteRule[],\n});\n\nconst cleanPath = (pattern: string) =>\n pattern.startsWith('/') ? pattern : `/${pattern}`;\n\n/**\n * Standardizes pattern to :param syntax.\n * Supports:\n * - Next.js/SvelteKit/Nuxt: [slug], [...slug], [[slug]]\n * - TanStack Router: $slug\n * - Solid Router: *slug\n * - React/Vue Router: :slug, *\n */\nconst normalizePattern = (pattern: string, framework?: string) => {\n let normalized = pattern;\n\n if (framework === 'nextjs') {\n normalized = normalized\n .replace(/\\[\\[\\.\\.\\.([^\\]]+)\\]\\]/g, ':$1*') // [[...slug]] -> :slug* (0+)\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, ':$1+') // [...slug] -> :slug+ (1+)\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [slug] -> :slug (1)\n } else if (framework === 'sveltekit') {\n normalized = normalized\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, ':$1*') // [...path] -> :path* (0+)\n .replace(/\\[\\[([^\\]]+)\\]\\]/g, ':$1?') // [[optional]] -> :optional? (0-1)\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [slug] -> :slug (1)\n } else if (framework === 'nuxt') {\n normalized = normalized\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, ':$1*') // [...slug] -> :slug* (0+)\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [slug] -> :slug (1)\n } else {\n // Default / Generic (React Router, Vue Router, Solid Router, TanStack Router)\n normalized = normalized\n .replace(/\\$([^/]+)/g, ':$1') // TanStack $slug -> :slug\n .replace(/\\*([^/]+)/g, ':$1*') // Solid *slug -> :slug*\n .replace(/:([^/]+)\\?/g, ':$1?') // Vue Router/React Router :slug? -> :slug?\n .replace(/\\*/g, ':path*'); // React Router * -> :path*\n }\n\n return normalized;\n};\n\n/**\n * Removes locale markers from the pattern.\n */\nconst stripLocale = (pattern: string) =>\n pattern\n .replace(/\\/?(:locale|\\[locale\\]|\\$locale)\\/?/g, '/')\n .replace(/\\/+/g, '/')\n .replace(/\\/$/, '') || '/';\n\n/**\n * Factory to create formatters that populate 'url' and a specific proxy key.\n */\nconst createFormatter =\n (proxyKey: 'nextjs' | 'vite', framework?: string) =>\n <T extends string = string>(\n rules: Record<T, Partial<StrictModeLocaleMap<string>>>\n ): RewriteObject => {\n const normalize = (pattern: string) => normalizePattern(pattern, framework);\n const strip = (pattern: string) => stripLocale(normalize(pattern));\n\n return {\n url: buildRules(rules as any, (pattern) => cleanPath(strip(pattern))),\n [proxyKey]: buildRules(rules as any, (pattern) =>\n cleanPath(normalize(pattern))\n ),\n } as RewriteObject;\n };\n\n/**\n * Formatter for Next.js style rewrites.\n * Patterns use Next.js dynamic routing syntax:\n * - Slug: `[slug]`\n * - Catch-all: `[...slug]` (1+)\n * - Optional catch-all: `[[...slug]]` (0+)\n * - Locale: `[locale]`\n */\nexport const nextjsRewrite = createFormatter('nextjs', 'nextjs');\n\n/**\n * Formatter for SvelteKit style rewrites.\n * Patterns use SvelteKit dynamic routing syntax:\n * - Slug: `[slug]`\n * - Catch-all: `[...slug]` (0+)\n * - Locale: `[locale]`\n */\nexport const svelteKitRewrite = createFormatter('vite', 'sveltekit');\n\n/**\n * Formatter for React Router style rewrites.\n * Patterns use React Router dynamic routing syntax:\n * - Slug: `:slug`\n * - Optional slug: `:slug?`\n * - Catch-all: `*`\n * - Locale: `:locale`\n */\nexport const reactRouterRewrite = createFormatter('vite');\n\n/**\n * Formatter for Vue style rewrites.\n * Patterns use Vue Router 4 dynamic routing syntax:\n * - Slug: `:slug`\n * - Optional slug: `:slug?`\n * - Catch-all: `:slug*` or `:slug+`\n * - Locale: `:locale`\n */\nexport const vueRouterRewrite = createFormatter('vite');\n\n/**\n * Formatter for Solid Router style rewrites.\n * Patterns use Solid Router dynamic routing syntax:\n * - Slug: `:slug`\n * - Catch-all: `*slug`\n * - Locale: `:locale`\n */\nexport const solidRouterRewrite = createFormatter('vite');\n\n/**\n * Formatter for Nuxt style rewrites.\n * Patterns use Nuxt 3 dynamic routing syntax:\n * - Slug: `[slug]`\n * - Catch-all: `[...slug]` (0+)\n * - Locale: `[locale]`\n */\nexport const nuxtRewrite = createFormatter('vite', 'nuxt');\n\n/**\n * Formatter for TanStack Router style rewrites.\n * Patterns use TanStack Router dynamic routing syntax:\n * - Slug: `$slug`\n * - Catch-all: `*`\n * - Locale: `$locale`\n */\nexport const tanstackRouterRewrite = createFormatter('vite');\n\n/**\n * Generic formatter for Vite-based projects.\n * Supports most dynamic routing syntaxes and normalizes them for the Vite proxy.\n */\nexport const viteRewrite = createFormatter('vite');\n"],"mappings":";AAOA,MAAM,cACJ,OACA,eACkB,EAClB,OAAO,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,WAAW,gBAAgB;CAC5D,WAAW,UAAU,UAAU;CAC/B,WAAW,OAAO,YAChB,OAAO,QAAQ,UAAU,CAAC,KAAK,CAAC,QAAQ,aAAa,CACnD,QACA,UAAU,UAAU,QAAQ,GAAG,QAChC,CAAC,CACH;CACF,EAAE,EACJ;AAED,MAAM,aAAa,YACjB,QAAQ,WAAW,IAAI,GAAG,UAAU,IAAI;;;;;;;;;AAU1C,MAAM,oBAAoB,SAAiB,cAAuB;CAChE,IAAI,aAAa;AAEjB,KAAI,cAAc,UAAU;AAC1B,eAAa,WACV,QAAQ,2BAA2B,OAAO,CAC1C,QAAQ,uBAAuB,OAAO,CACtC,QAAQ,iBAAiB,MAAM;YACzB,cAAc,aAAa;AACpC,eAAa,WACV,QAAQ,uBAAuB,OAAO,CACtC,QAAQ,qBAAqB,OAAO,CACpC,QAAQ,iBAAiB,MAAM;YACzB,cAAc,QAAQ;AAC/B,eAAa,WACV,QAAQ,uBAAuB,OAAO,CACtC,QAAQ,iBAAiB,MAAM;QAC7B;AAEL,eAAa,WACV,QAAQ,cAAc,MAAM,CAC5B,QAAQ,cAAc,OAAO,CAC7B,QAAQ,eAAe,OAAO,CAC9B,QAAQ,OAAO,SAAS;;AAG7B,QAAO;;;;;AAMT,MAAM,eAAe,YACnB,QACG,QAAQ,wCAAwC,IAAI,CACpD,QAAQ,QAAQ,IAAI,CACpB,QAAQ,OAAO,GAAG,IAAI;;;;AAK3B,MAAM,mBACH,UAA6B,eAE5B,UACkB;CAClB,MAAM,aAAa,YAAoB,iBAAiB,SAAS,UAAU;CAC3E,MAAM,SAAS,YAAoB,YAAY,UAAU,QAAQ,CAAC;AAElE,QAAO;EACL,KAAK,WAAW,QAAe,YAAY,UAAU,MAAM,QAAQ,CAAC,CAAC;GACpE,WAAW,WAAW,QAAe,YACpC,UAAU,UAAU,QAAQ,CAAC,CAC9B;EACF;;;;;;;;;;AAWL,MAAa,gBAAgB,gBAAgB,UAAU,SAAS;;;;;;;;AAShE,MAAa,mBAAmB,gBAAgB,QAAQ,YAAY;;;;;;;;;AAUpE,MAAa,qBAAqB,gBAAgB,OAAO;;;;;;;;;AAUzD,MAAa,mBAAmB,gBAAgB,OAAO;;;;;;;;AASvD,MAAa,qBAAqB,gBAAgB,OAAO;;;;;;;;AASzD,MAAa,cAAc,gBAAgB,QAAQ,OAAO;;;;;;;;AAS1D,MAAa,wBAAwB,gBAAgB,OAAO;;;;;AAM5D,MAAa,cAAc,gBAAgB,OAAO"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/routing/index.ts"],"sourcesContent":["import type {\n RewriteObject,\n RewriteRule,\n RewriteRules,\n} from '@intlayer/types/config';\nimport type { StrictModeLocaleMap } from '@intlayer/types/module_augmentation';\n\nconst buildRules = (\n rules: Record<string, StrictModeLocaleMap<string>>,\n processor: (pattern: string) => string\n): RewriteRules => ({\n rules: Object.entries(rules).map(([canonical, localized]) => ({\n canonical: processor(canonical),\n localized: Object.fromEntries(\n Object.entries(localized).map(([locale, pattern]) => [\n locale,\n pattern ? processor(pattern) : pattern,\n ])\n ) as StrictModeLocaleMap<string>,\n })) as RewriteRule[],\n});\n\nconst cleanPath = (pattern: string) =>\n pattern.startsWith('/') ? pattern : `/${pattern}`;\n\n/**\n * Standardizes pattern to :param syntax.\n * Supports:\n * - Next.js/SvelteKit/Nuxt: [slug], [...slug], [[slug]]\n * - TanStack Router: $slug\n * - Solid Router: *slug\n * - React/Vue Router: :slug, *\n */\nconst normalizePattern = (pattern: string, framework?: string) => {\n let normalized = pattern;\n\n if (framework === 'nextjs') {\n normalized = normalized\n .replace(/\\[\\[\\.\\.\\.([^\\]]+)\\]\\]/g, ':$1*') // [[...slug]] -> :slug* (0+)\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, ':$1+') // [...slug] -> :slug+ (1+)\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [slug] -> :slug (1)\n } else if (framework === 'sveltekit') {\n normalized = normalized\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, ':$1*') // [...path] -> :path* (0+)\n .replace(/\\[\\[([^\\]]+)\\]\\]/g, ':$1?') // [[optional]] -> :optional? (0-1)\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [slug] -> :slug (1)\n } else if (framework === 'nuxt') {\n normalized = normalized\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, ':$1*') // [...slug] -> :slug* (0+)\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [slug] -> :slug (1)\n } else {\n // Default / Generic (React Router, Vue Router, Solid Router, TanStack Router)\n normalized = normalized\n .replace(/\\$([^/]+)/g, ':$1') // TanStack $slug -> :slug\n .replace(/\\*([^/]+)/g, ':$1*') // Solid *slug -> :slug*\n .replace(/:([^/]+)\\?/g, ':$1?') // Vue Router/React Router :slug? -> :slug?\n .replace(/\\*/g, ':path*'); // React Router * -> :path*\n }\n\n return normalized;\n};\n\n/**\n * Removes locale markers from the pattern.\n */\nconst stripLocale = (pattern: string) =>\n pattern\n .replace(/\\/?(:locale|\\[locale\\]|\\$locale)\\/?/g, '/')\n .replace(/\\/+/g, '/')\n .replace(/\\/$/, '') || '/';\n\n/**\n * Factory to create formatters that populate 'url' and a specific proxy key.\n */\nconst createFormatter =\n (proxyKey: 'nextjs' | 'vite', framework?: string) =>\n <T extends string = string>(\n rules: Record<T, Partial<StrictModeLocaleMap<string>>>\n ): RewriteObject => {\n const normalize = (pattern: string) => normalizePattern(pattern, framework);\n const strip = (pattern: string) => stripLocale(normalize(pattern));\n\n return {\n url: buildRules(rules as any, (pattern) => cleanPath(strip(pattern))),\n [proxyKey]: buildRules(rules as any, (pattern) =>\n cleanPath(normalize(pattern))\n ),\n } as RewriteObject;\n };\n\n/**\n * Formatter for Next.js style rewrites.\n * Patterns use Next.js dynamic routing syntax:\n * - Slug: `[slug]`\n * - Catch-all: `[...slug]` (1+)\n * - Optional catch-all: `[[...slug]]` (0+)\n * - Locale: `[locale]`\n */\nexport const nextjsRewrite = createFormatter('nextjs', 'nextjs');\n\n/**\n * Formatter for SvelteKit style rewrites.\n * Patterns use SvelteKit dynamic routing syntax:\n * - Slug: `[slug]`\n * - Catch-all: `[...slug]` (0+)\n * - Locale: `[locale]`\n */\nexport const svelteKitRewrite = createFormatter('vite', 'sveltekit');\n\n/**\n * Formatter for React Router style rewrites.\n * Patterns use React Router dynamic routing syntax:\n * - Slug: `:slug`\n * - Optional slug: `:slug?`\n * - Catch-all: `*`\n * - Locale: `:locale`\n */\nexport const reactRouterRewrite = createFormatter('vite');\n\n/**\n * Formatter for Vue style rewrites.\n * Patterns use Vue Router 4 dynamic routing syntax:\n * - Slug: `:slug`\n * - Optional slug: `:slug?`\n * - Catch-all: `:slug*` or `:slug+`\n * - Locale: `:locale`\n */\nexport const vueRouterRewrite = createFormatter('vite');\n\n/**\n * Formatter for Solid Router style rewrites.\n * Patterns use Solid Router dynamic routing syntax:\n * - Slug: `:slug`\n * - Catch-all: `*slug`\n * - Locale: `:locale`\n */\nexport const solidRouterRewrite = createFormatter('vite');\n\n/**\n * Formatter for Nuxt style rewrites.\n * Patterns use Nuxt 3 dynamic routing syntax:\n * - Slug: `[slug]`\n * - Catch-all: `[...slug]` (0+)\n * - Locale: `[locale]`\n */\nexport const nuxtRewrite = createFormatter('vite', 'nuxt');\n\n/**\n * Formatter for TanStack Router style rewrites.\n * Patterns use TanStack Router dynamic routing syntax:\n * - Slug: `$slug`\n * - Catch-all: `*`\n * - Locale: `$locale`\n */\nexport const tanstackRouterRewrite = createFormatter('vite');\n\n/**\n * Generic formatter for Vite-based projects.\n * Supports most dynamic routing syntaxes and normalizes them for the Vite proxy.\n */\nexport const viteRewrite = createFormatter('vite');\n"],"mappings":";AAOA,MAAM,cACJ,OACA,eACkB,EAClB,OAAO,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,WAAW,gBAAgB;CAC5D,WAAW,UAAU,UAAU;CAC/B,WAAW,OAAO,YAChB,OAAO,QAAQ,UAAU,CAAC,KAAK,CAAC,QAAQ,aAAa,CACnD,QACA,UAAU,UAAU,QAAQ,GAAG,QAChC,CAAC,CACH;CACF,EAAE,EACJ;AAED,MAAM,aAAa,YACjB,QAAQ,WAAW,IAAI,GAAG,UAAU,IAAI;;;;;;;;;AAU1C,MAAM,oBAAoB,SAAiB,cAAuB;CAChE,IAAI,aAAa;CAEjB,IAAI,cAAc,UAAU;EAC1B,aAAa,WACV,QAAQ,2BAA2B,OAAO,CAC1C,QAAQ,uBAAuB,OAAO,CACtC,QAAQ,iBAAiB,MAAM;QAC7B,IAAI,cAAc,aAAa;EACpC,aAAa,WACV,QAAQ,uBAAuB,OAAO,CACtC,QAAQ,qBAAqB,OAAO,CACpC,QAAQ,iBAAiB,MAAM;QAC7B,IAAI,cAAc,QAAQ;EAC/B,aAAa,WACV,QAAQ,uBAAuB,OAAO,CACtC,QAAQ,iBAAiB,MAAM;QAC7B;EAEL,aAAa,WACV,QAAQ,cAAc,MAAM,CAC5B,QAAQ,cAAc,OAAO,CAC7B,QAAQ,eAAe,OAAO,CAC9B,QAAQ,OAAO,SAAS;;CAG7B,OAAO;;;;;AAMT,MAAM,eAAe,YACnB,QACG,QAAQ,wCAAwC,IAAI,CACpD,QAAQ,QAAQ,IAAI,CACpB,QAAQ,OAAO,GAAG,IAAI;;;;AAK3B,MAAM,mBACH,UAA6B,eAE5B,UACkB;CAClB,MAAM,aAAa,YAAoB,iBAAiB,SAAS,UAAU;CAC3E,MAAM,SAAS,YAAoB,YAAY,UAAU,QAAQ,CAAC;CAElE,OAAO;EACL,KAAK,WAAW,QAAe,YAAY,UAAU,MAAM,QAAQ,CAAC,CAAC;GACpE,WAAW,WAAW,QAAe,YACpC,UAAU,UAAU,QAAQ,CAAC,CAC9B;EACF;;;;;;;;;;AAWL,MAAa,gBAAgB,gBAAgB,UAAU,SAAS;;;;;;;;AAShE,MAAa,mBAAmB,gBAAgB,QAAQ,YAAY;;;;;;;;;AAUpE,MAAa,qBAAqB,gBAAgB,OAAO;;;;;;;;;AAUzD,MAAa,mBAAmB,gBAAgB,OAAO;;;;;;;;AASvD,MAAa,qBAAqB,gBAAgB,OAAO;;;;;;;;AASzD,MAAa,cAAc,gBAAgB,QAAQ,OAAO;;;;;;;;AAS1D,MAAa,wBAAwB,gBAAgB,OAAO;;;;;AAM5D,MAAa,cAAc,gBAAgB,OAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intlayer",
3
- "version": "8.9.1",
3
+ "version": "8.9.3",
4
4
  "private": false,
5
5
  "description": "Manage internationalization i18n in a simple way, through TypeScript, declaration file, declare your multilingual content every where in your code.",
6
6
  "keywords": [
@@ -95,18 +95,18 @@
95
95
  "typecheck": "tsc --noEmit --project tsconfig.types.json"
96
96
  },
97
97
  "dependencies": {
98
- "@intlayer/cli": "8.9.1",
99
- "@intlayer/config": "8.9.1",
100
- "@intlayer/core": "8.9.1",
101
- "@intlayer/types": "8.9.1"
98
+ "@intlayer/cli": "8.9.3",
99
+ "@intlayer/config": "8.9.3",
100
+ "@intlayer/core": "8.9.3",
101
+ "@intlayer/types": "8.9.3"
102
102
  },
103
103
  "devDependencies": {
104
- "@types/node": "25.6.0",
104
+ "@types/node": "25.6.1",
105
105
  "@utils/ts-config": "1.0.4",
106
106
  "@utils/ts-config-types": "1.0.4",
107
107
  "@utils/tsdown-config": "1.0.4",
108
108
  "rimraf": "6.1.3",
109
- "tsdown": "0.21.10",
109
+ "tsdown": "0.22.00",
110
110
  "typescript": "6.0.3",
111
111
  "vitest": "4.1.5"
112
112
  },