feat(infra): route package (#10353)

This commit is contained in:
forehalo
2025-04-23 09:49:10 +00:00
parent e501e35d3d
commit 64997d4a0e
14 changed files with 654 additions and 18 deletions

View File

@@ -0,0 +1,13 @@
import { describe, expect, it } from 'vitest';
import { FACTORIES } from '../routes';
describe('PATH_FACTORIES', () => {
it('should generate correct paths', () => {
expect(
FACTORIES.admin.settings.module({
module: 'auth',
})
).toBe('/admin/settings/auth');
});
});

View File

@@ -0,0 +1,44 @@
// #region Path Parameter Types
export interface RouteParamsTypes {
admin: { settings: { module: { module: string } } };
}
// #endregion
// #region Absolute Paths
export const ROUTES = {
index: '/',
admin: {
index: '/admin',
accounts: '/admin/accounts',
ai: '/admin/ai',
settings: { index: '/admin/settings', module: '/admin/settings/:module' },
about: '/admin/about',
},
};
// #endregion
// #region Relative Paths
export const RELATIVE_ROUTES = {
index: '/',
admin: {
index: 'admin',
accounts: 'accounts',
ai: 'ai',
settings: { index: 'settings', module: ':module' },
about: 'about',
},
};
// #endregion
// #region Path Factories
const home = () => '/';
const admin = () => '/admin';
admin.accounts = () => '/admin/accounts';
admin.ai = () => '/admin/ai';
const admin_settings = () => '/admin/settings';
admin_settings.module = (params: { module: string }) =>
`/admin/settings/${params.module}`;
admin.settings = admin_settings;
admin.about = () => '/admin/about';
export const FACTORIES = { admin, home };
// #endregion