@buzola/router 0.0.1 → 0.0.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buzola/router",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -16,7 +16,15 @@
16
16
  "default": "./dist/react/index.js"
17
17
  }
18
18
  },
19
- "files": ["dist", "src"],
19
+ "files": [
20
+ "dist",
21
+ "src"
22
+ ],
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/contember/buzola",
26
+ "directory": "packages/buzola"
27
+ },
20
28
  "peerDependencies": {
21
29
  "react": "^18.0.0 || ^19.0.0"
22
30
  },
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=define-routes.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"define-routes.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/define-routes.test.ts"],"names":[],"mappings":""}
@@ -1,42 +0,0 @@
1
- import { describe, expect, it } from 'bun:test';
2
- import { defineRoutes } from '../define/define-routes';
3
- function dummyComponent() {
4
- return null;
5
- }
6
- describe('defineRoutes', () => {
7
- it('creates a flat route tree', () => {
8
- const routes = defineRoutes(route => [
9
- route('/', { component: dummyComponent }),
10
- route('/about', { component: dummyComponent }),
11
- ]);
12
- expect(routes).toHaveLength(2);
13
- expect(routes[0].fullPath).toBe('/');
14
- expect(routes[1].fullPath).toBe('/about');
15
- });
16
- it('creates nested routes', () => {
17
- const routes = defineRoutes(route => [
18
- route('/', { component: dummyComponent }, [
19
- route('/', { component: dummyComponent }),
20
- route('/about', { component: dummyComponent }),
21
- ]),
22
- ]);
23
- expect(routes).toHaveLength(1);
24
- expect(routes[0].isLayout).toBe(true);
25
- expect(routes[0].children).toHaveLength(2);
26
- expect(routes[0].children[0].fullPath).toBe('/');
27
- expect(routes[0].children[1].fullPath).toBe('/about');
28
- });
29
- it('creates deeply nested routes with params', () => {
30
- const routes = defineRoutes(route => [
31
- route('/users', { component: dummyComponent }, [
32
- route('/', { component: dummyComponent }),
33
- route('/:userId', { component: dummyComponent }),
34
- ]),
35
- ]);
36
- expect(routes).toHaveLength(1);
37
- expect(routes[0].fullPath).toBe('/users');
38
- expect(routes[0].children).toHaveLength(2);
39
- expect(routes[0].children[1].fullPath).toBe('/users/:userId');
40
- });
41
- });
42
- //# sourceMappingURL=define-routes.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"define-routes.test.js","sourceRoot":"","sources":["../../src/__tests__/define-routes.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/types.test.ts"],"names":[],"mappings":""}
@@ -1,22 +0,0 @@
1
- import { describe, expect, it } from 'bun:test';
2
- describe('ParamsForPath type', () => {
3
- it('extracts no params from static paths', () => {
4
- // Type-level test: this should compile without error
5
- const _test = {};
6
- expect(true).toBe(true);
7
- });
8
- it('extracts a single param', () => {
9
- const _test = { userId: 'abc' };
10
- expect(_test.userId).toBe('abc');
11
- });
12
- it('extracts multiple params', () => {
13
- const _test = { userId: '1', postId: '2' };
14
- expect(_test.userId).toBe('1');
15
- expect(_test.postId).toBe('2');
16
- });
17
- it('handles root path', () => {
18
- const _test = {};
19
- expect(true).toBe(true);
20
- });
21
- });
22
- //# sourceMappingURL=types.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../src/__tests__/types.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAAU,CAAA;AAG/C,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC/C,qDAAqD;QACrD,MAAM,KAAK,GAA4B,EAAwB,CAAA;QAC/D,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QAClC,MAAM,KAAK,GAAoC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;QAChE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACnC,MAAM,KAAK,GAAkD,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;QACzF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC9B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC5B,MAAM,KAAK,GAAuB,EAAwB,CAAA;QAC1D,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -1,34 +0,0 @@
1
- import type { RouteComponent, RouteConfig, RouteGuard, RouteNode, StandardSchema } from '../engine/types';
2
- export interface DefineRouteOptions {
3
- /** Schema for validating search params. */
4
- searchSchema?: StandardSchema;
5
- /** Guard function called before entering this route. */
6
- beforeEnter?: RouteGuard;
7
- }
8
- /**
9
- * Define route-level configuration for a route file.
10
- * Used in file-based routing: `export const route = defineRoute({ ... })`.
11
- */
12
- export declare function defineRoute(options: DefineRouteOptions): DefineRouteOptions;
13
- export interface RouteDefinitionOptions {
14
- component?: RouteComponent;
15
- searchSchema?: StandardSchema;
16
- beforeEnter?: RouteGuard;
17
- }
18
- export type RouteBuilderFn = (route: (path: string, options: RouteDefinitionOptions | RouteComponent, children?: RouteConfig[]) => RouteConfig) => RouteConfig[];
19
- /**
20
- * Declarative route definition builder.
21
- *
22
- * @example
23
- * ```ts
24
- * const routeTree = defineRoutes(route => [
25
- * route('/', { component: Home }),
26
- * route('/users', { component: UsersLayout }, [
27
- * route('/', { component: UsersList }),
28
- * route('/:userId', { component: UserDetail }),
29
- * ]),
30
- * ]);
31
- * ```
32
- */
33
- export declare function defineRoutes(builder: RouteBuilderFn): RouteNode[];
34
- //# sourceMappingURL=define-routes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"define-routes.d.ts","sourceRoot":"","sources":["../../src/define/define-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAIzG,MAAM,WAAW,kBAAkB;IAClC,2CAA2C;IAC3C,YAAY,CAAC,EAAE,cAAc,CAAA;IAC7B,wDAAwD;IACxD,WAAW,CAAC,EAAE,UAAU,CAAA;CACxB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAE3E;AAaD,MAAM,WAAW,sBAAsB;IACtC,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,YAAY,CAAC,EAAE,cAAc,CAAA;IAC7B,WAAW,CAAC,EAAE,UAAU,CAAA;CACxB;AAED,MAAM,MAAM,cAAc,GAAG,CAC5B,KAAK,EAAE,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,sBAAsB,GAAG,cAAc,EAChD,QAAQ,CAAC,EAAE,WAAW,EAAE,KACpB,WAAW,KACZ,WAAW,EAAE,CAAA;AAElB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,EAAE,CA2BjE"}
@@ -1,53 +0,0 @@
1
- import { buildRouteTree } from '../engine/route-tree';
2
- /**
3
- * Define route-level configuration for a route file.
4
- * Used in file-based routing: `export const route = defineRoute({ ... })`.
5
- */
6
- export function defineRoute(options) {
7
- return options;
8
- }
9
- function isRouteComponent(value) {
10
- if (typeof value === 'function')
11
- return true;
12
- // Check for known option keys to distinguish from component objects (e.g. React.lazy)
13
- if (typeof value === 'object' && value !== null) {
14
- return !('component' in value || 'searchSchema' in value || 'beforeEnter' in value);
15
- }
16
- return false;
17
- }
18
- /**
19
- * Declarative route definition builder.
20
- *
21
- * @example
22
- * ```ts
23
- * const routeTree = defineRoutes(route => [
24
- * route('/', { component: Home }),
25
- * route('/users', { component: UsersLayout }, [
26
- * route('/', { component: UsersList }),
27
- * route('/:userId', { component: UserDetail }),
28
- * ]),
29
- * ]);
30
- * ```
31
- */
32
- export function defineRoutes(builder) {
33
- function route(path, options, children) {
34
- // If options is a component directly (function or lazy), wrap it
35
- const opts = isRouteComponent(options)
36
- ? { component: options }
37
- : options;
38
- const isIndex = path === '/' || path === '';
39
- const hasChildren = children != null && children.length > 0;
40
- return {
41
- path,
42
- component: opts.component,
43
- searchSchema: opts.searchSchema,
44
- beforeEnter: opts.beforeEnter,
45
- children,
46
- isIndex: isIndex && !hasChildren,
47
- isLayout: hasChildren,
48
- };
49
- }
50
- const configs = builder(route);
51
- return buildRouteTree(configs);
52
- }
53
- //# sourceMappingURL=define-routes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"define-routes.js","sourceRoot":"","sources":["../../src/define/define-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAYrD;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B;IACtD,OAAO,OAAO,CAAA;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA8C;IACvE,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,OAAO,IAAI,CAAA;IAC5C,sFAAsF;IACtF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,OAAO,CAAC,CAAC,WAAW,IAAI,KAAK,IAAI,cAAc,IAAI,KAAK,IAAI,aAAa,IAAI,KAAK,CAAC,CAAA;IACpF,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAkBD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY,CAAC,OAAuB;IACnD,SAAS,KAAK,CACb,IAAY,EACZ,OAAgD,EAChD,QAAwB;QAExB,iEAAiE;QACjE,MAAM,IAAI,GAA2B,gBAAgB,CAAC,OAAO,CAAC;YAC7D,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE;YACxB,CAAC,CAAC,OAAO,CAAA;QAEV,MAAM,OAAO,GAAG,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,EAAE,CAAA;QAC3C,MAAM,WAAW,GAAG,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;QAE3D,OAAO;YACN,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ;YACR,OAAO,EAAE,OAAO,IAAI,CAAC,WAAW;YAChC,QAAQ,EAAE,WAAW;SACrB,CAAA;IACF,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IAC9B,OAAO,cAAc,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC"}