path-rush 1.3.0 → 1.4.0

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/dist/react.d.cts CHANGED
@@ -1,5 +1,16 @@
1
+ import * as React from 'react';
2
+ import React__default from 'react';
3
+ import { LinkProps } from 'react-router-dom';
1
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React from 'react';
5
+
6
+ declare function useLink(props: {
7
+ href: string;
8
+ }): {
9
+ href: string;
10
+ isActive: boolean;
11
+ };
12
+
13
+ declare const Link: React.ForwardRefExoticComponent<LinkProps & React.RefAttributes<HTMLAnchorElement>>;
3
14
 
4
15
  type RouterProviderProps = {
5
16
  /**
@@ -12,7 +23,7 @@ type RouterProviderProps = {
12
23
  * @default
13
24
  * <div>Loading...</div>
14
25
  */
15
- preloader?: React.ReactNode;
26
+ preloader?: React__default.ReactNode;
16
27
  /**
17
28
  * 📍 Базовый путь для маршрутизации
18
29
  *
@@ -27,9 +38,9 @@ type RouterProviderProps = {
27
38
  * @default '/'
28
39
  */
29
40
  basePath?: string;
30
- children?: React.ReactNode;
41
+ children?: React__default.ReactNode;
31
42
  };
32
43
 
33
44
  declare function RouterProvider({ children, preloader, basePath, }: Readonly<RouterProviderProps>): react_jsx_runtime.JSX.Element;
34
45
 
35
- export { RouterProvider, type RouterProviderProps };
46
+ export { Link, RouterProvider, type RouterProviderProps, useLink };
package/dist/react.d.ts CHANGED
@@ -1,5 +1,16 @@
1
+ import * as React from 'react';
2
+ import React__default from 'react';
3
+ import { LinkProps } from 'react-router-dom';
1
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React from 'react';
5
+
6
+ declare function useLink(props: {
7
+ href: string;
8
+ }): {
9
+ href: string;
10
+ isActive: boolean;
11
+ };
12
+
13
+ declare const Link: React.ForwardRefExoticComponent<LinkProps & React.RefAttributes<HTMLAnchorElement>>;
3
14
 
4
15
  type RouterProviderProps = {
5
16
  /**
@@ -12,7 +23,7 @@ type RouterProviderProps = {
12
23
  * @default
13
24
  * <div>Loading...</div>
14
25
  */
15
- preloader?: React.ReactNode;
26
+ preloader?: React__default.ReactNode;
16
27
  /**
17
28
  * 📍 Базовый путь для маршрутизации
18
29
  *
@@ -27,9 +38,9 @@ type RouterProviderProps = {
27
38
  * @default '/'
28
39
  */
29
40
  basePath?: string;
30
- children?: React.ReactNode;
41
+ children?: React__default.ReactNode;
31
42
  };
32
43
 
33
44
  declare function RouterProvider({ children, preloader, basePath, }: Readonly<RouterProviderProps>): react_jsx_runtime.JSX.Element;
34
45
 
35
- export { RouterProvider, type RouterProviderProps };
46
+ export { Link, RouterProvider, type RouterProviderProps, useLink };
package/dist/react.js CHANGED
@@ -30,20 +30,37 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/react.ts
31
31
  var react_exports = {};
32
32
  __export(react_exports, {
33
- RouterProvider: () => RouterProvider
33
+ Link: () => Link,
34
+ RouterProvider: () => RouterProvider,
35
+ useLink: () => useLink
34
36
  });
35
37
  module.exports = __toCommonJS(react_exports);
36
38
 
39
+ // src/components/hooks/use-links.tsx
40
+ var import_react_router_dom = require("react-router-dom");
41
+ function useLink(props) {
42
+ const location = (0, import_react_router_dom.useLocation)();
43
+ const currentPath = location.pathname;
44
+ return {
45
+ href: props.href,
46
+ isActive: currentPath === props.href
47
+ };
48
+ }
49
+
50
+ // src/components/link.tsx
51
+ var import_react_router_dom2 = require("react-router-dom");
52
+ var Link = import_react_router_dom2.Link;
53
+
37
54
  // src/components/router-provider.tsx
38
55
  var import_virtual_routes = require("virtual:routes");
39
56
 
40
57
  // src/components/router-layout.tsx
41
58
  var import_react2 = __toESM(require("react"), 1);
42
- var import_react_router_dom2 = require("react-router-dom");
59
+ var import_react_router_dom4 = require("react-router-dom");
43
60
 
44
61
  // src/components/router-utils.tsx
45
62
  var import_react = __toESM(require("react"), 1);
46
- var import_react_router_dom = require("react-router-dom");
63
+ var import_react_router_dom3 = require("react-router-dom");
47
64
  var import_jsx_runtime = require("react/jsx-runtime");
48
65
  function wrapLayouts(layouts, pageEl) {
49
66
  if (!layouts || layouts.length === 0) return pageEl;
@@ -81,7 +98,7 @@ var renderManifestAsRoutes = (manifest2) => {
81
98
  );
82
99
  });
83
100
  const element = wrapLayouts(n.layouts, /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Page, {}));
84
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, { path: n.path, element }, n.id);
101
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom3.Route, { path: n.path, element }, n.id);
85
102
  });
86
103
  };
87
104
 
@@ -92,7 +109,7 @@ var RouterLayout = ({
92
109
  children,
93
110
  preloader,
94
111
  basePath = "/"
95
- }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_router_dom2.BrowserRouter, { basename: basePath, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react2.default.Suspense, { fallback: children || preloader || /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: "Loading..." }), children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_router_dom2.Routes, { children: renderManifestAsRoutes(manifest2) }) }) });
112
+ }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_router_dom4.BrowserRouter, { basename: basePath, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react2.default.Suspense, { fallback: children || preloader || /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: "Loading..." }), children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_router_dom4.Routes, { children: renderManifestAsRoutes(manifest2) }) }) });
96
113
 
97
114
  // src/components/router-provider.tsx
98
115
  var import_jsx_runtime3 = require("react/jsx-runtime");
@@ -106,6 +123,8 @@ function RouterProvider({
106
123
  }
107
124
  // Annotate the CommonJS export names for ESM import in node:
108
125
  0 && (module.exports = {
109
- RouterProvider
126
+ Link,
127
+ RouterProvider,
128
+ useLink
110
129
  });
111
130
  //# sourceMappingURL=react.js.map
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react.ts","../src/components/router-provider.tsx","../src/components/router-layout.tsx","../src/components/router-utils.tsx"],"sourcesContent":["export { default as RouterProvider } from './components/router-provider'\r\nexport type { RouterProviderProps } from './components/types/types'\r\n","import { manifest, basePath as configBasePath } from 'virtual:routes'\r\nimport { RouterLayout } from './router-layout'\r\nimport type { RouterProviderProps } from './types/types'\r\n\r\nexport default function RouterProvider({\r\n\tchildren,\r\n\tpreloader,\r\n\tbasePath,\r\n}: Readonly<RouterProviderProps>) {\r\n\t// Используем basePath из пропсов, если указан, иначе из конфигурации\r\n\tconst finalBasePath = basePath ?? configBasePath ?? '/'\r\n\t\r\n\treturn (\r\n\t\t<RouterLayout manifest={manifest} preloader={preloader} basePath={finalBasePath}>\r\n\t\t\t{children}\r\n\t\t</RouterLayout>\r\n\t)\r\n}\r\n","import React from 'react'\r\nimport { BrowserRouter, Routes } from 'react-router-dom'\r\nimport { renderManifestAsRoutes } from './router-utils'\r\nimport type { RouterLayoutProps } from './types/types'\r\n\r\nexport const RouterLayout = ({\r\n\tmanifest,\r\n\tchildren,\r\n\tpreloader,\r\n\tbasePath = '/',\r\n}: RouterLayoutProps) => (\r\n\t<BrowserRouter basename={basePath}>\r\n\t\t<React.Suspense fallback={children || preloader || <div>Loading...</div>}>\r\n\t\t\t<Routes>{renderManifestAsRoutes(manifest)}</Routes>\r\n\t\t</React.Suspense>\r\n\t</BrowserRouter>\r\n)\r\n","import React from 'react'\r\nimport { Route } from 'react-router-dom'\r\nimport type { Node } from './types/types'\r\n\r\nfunction wrapLayouts(\r\n\tlayouts: Node['layouts'] | undefined,\r\n\tpageEl: React.ReactNode\r\n) {\r\n\tif (!layouts || layouts.length === 0) return pageEl\r\n\r\n\treturn layouts.reduceRight((child, loader) => {\r\n\t\tconst Layout = React.lazy(async () => {\r\n\t\t\tconst module = await loader()\r\n\t\t\t// Поддерживаем как default, так и именованный экспорт Layout\r\n\t\t\treturn 'default' in module ? module : { default: module.Layout }\r\n\t\t})\r\n\t\treturn <Layout>{child}</Layout>\r\n\t}, pageEl as React.ReactElement)\r\n}\r\n\r\nexport const renderManifestAsRoutes = (manifest: Node[]) => {\r\n\treturn manifest.map(n => {\r\n\t\tconst Page = React.lazy(async () => {\r\n\t\t\tconst module = await n.loader()\r\n\r\n\t\t\t// Если есть default экспорт, используем его\r\n\t\t\tif (\r\n\t\t\t\tmodule &&\r\n\t\t\t\ttypeof module === 'object' &&\r\n\t\t\t\t'default' in module &&\r\n\t\t\t\tmodule.default\r\n\t\t\t) {\r\n\t\t\t\treturn module as { default: React.ComponentType }\r\n\t\t\t}\r\n\r\n\t\t\t// Ищем любой именованный экспорт, который является функцией или компонентом\r\n\t\t\tif (module && typeof module === 'object') {\r\n\t\t\t\tconst namedExports = Object.keys(module).filter(\r\n\t\t\t\t\tkey => key !== 'default'\r\n\t\t\t\t)\r\n\t\t\t\tfor (const key of namedExports) {\r\n\t\t\t\t\tconst exportValue = module[key]\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof exportValue === 'function' ||\r\n\t\t\t\t\t\t(typeof exportValue === 'object' && exportValue !== null)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tdefault: exportValue as React.ComponentType,\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Если ничего не найдено, возвращаем ошибку\r\n\t\t\tconst availableExports =\r\n\t\t\t\tmodule && typeof module === 'object'\r\n\t\t\t\t\t? Object.keys(module).join(', ')\r\n\t\t\t\t\t: 'unknown'\r\n\t\t\tthrow new Error(\r\n\t\t\t\t`No valid export found in module for route ${n.path}. Available exports: ${availableExports}`\r\n\t\t\t)\r\n\t\t})\r\n\r\n\t\tconst element = wrapLayouts(n.layouts, <Page />)\r\n\t\treturn <Route key={n.id} path={n.path} element={element} />\r\n\t})\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,4BAAqD;;;ACArD,IAAAA,gBAAkB;AAClB,IAAAC,2BAAsC;;;ACDtC,mBAAkB;AAClB,8BAAsB;AAeb;AAZT,SAAS,YACR,SACA,QACC;AACD,MAAI,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;AAE7C,SAAO,QAAQ,YAAY,CAAC,OAAO,WAAW;AAC7C,UAAM,SAAS,aAAAC,QAAM,KAAK,YAAY;AACrC,YAAMC,UAAS,MAAM,OAAO;AAE5B,aAAO,aAAaA,UAASA,UAAS,EAAE,SAASA,QAAO,OAAO;AAAA,IAChE,CAAC;AACD,WAAO,4CAAC,UAAQ,iBAAM;AAAA,EACvB,GAAG,MAA4B;AAChC;AAEO,IAAM,yBAAyB,CAACC,cAAqB;AAC3D,SAAOA,UAAS,IAAI,OAAK;AACxB,UAAM,OAAO,aAAAF,QAAM,KAAK,YAAY;AACnC,YAAMC,UAAS,MAAM,EAAE,OAAO;AAG9B,UACCA,WACA,OAAOA,YAAW,YAClB,aAAaA,WACbA,QAAO,SACN;AACD,eAAOA;AAAA,MACR;AAGA,UAAIA,WAAU,OAAOA,YAAW,UAAU;AACzC,cAAM,eAAe,OAAO,KAAKA,OAAM,EAAE;AAAA,UACxC,SAAO,QAAQ;AAAA,QAChB;AACA,mBAAW,OAAO,cAAc;AAC/B,gBAAM,cAAcA,QAAO,GAAG;AAC9B,cACC,OAAO,gBAAgB,cACtB,OAAO,gBAAgB,YAAY,gBAAgB,MACnD;AACD,mBAAO;AAAA,cACN,SAAS;AAAA,YACV;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAGA,YAAM,mBACLA,WAAU,OAAOA,YAAW,WACzB,OAAO,KAAKA,OAAM,EAAE,KAAK,IAAI,IAC7B;AACJ,YAAM,IAAI;AAAA,QACT,6CAA6C,EAAE,IAAI,wBAAwB,gBAAgB;AAAA,MAC5F;AAAA,IACD,CAAC;AAED,UAAM,UAAU,YAAY,EAAE,SAAS,4CAAC,QAAK,CAAE;AAC/C,WAAO,4CAAC,iCAAiB,MAAM,EAAE,MAAM,WAApB,EAAE,EAAoC;AAAA,EAC1D,CAAC;AACF;;;ADtDqD,IAAAE,sBAAA;AAP9C,IAAM,eAAe,CAAC;AAAA,EAC5B,UAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACZ,MACC,6CAAC,0CAAc,UAAU,UACxB,uDAAC,cAAAC,QAAM,UAAN,EAAe,UAAU,YAAY,aAAa,6CAAC,SAAI,wBAAU,GACjE,uDAAC,mCAAQ,iCAAuBD,SAAQ,GAAE,GAC3C,GACD;;;ADFC,IAAAE,sBAAA;AATa,SAAR,eAAgC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACD,GAAkC;AAEjC,QAAM,gBAAgB,YAAY,sBAAAC,YAAkB;AAEpD,SACC,6CAAC,gBAAa,UAAU,gCAAU,WAAsB,UAAU,eAChE,UACF;AAEF;","names":["import_react","import_react_router_dom","React","module","manifest","import_jsx_runtime","manifest","React","import_jsx_runtime","configBasePath"]}
1
+ {"version":3,"sources":["../src/react.ts","../src/components/hooks/use-links.tsx","../src/components/link.tsx","../src/components/router-provider.tsx","../src/components/router-layout.tsx","../src/components/router-utils.tsx"],"sourcesContent":["export { useLink } from './components/hooks/use-links'\r\nexport { Link } from './components/link'\r\nexport { default as RouterProvider } from './components/router-provider'\r\nexport type { RouterProviderProps } from './components/types/types'\r\n","import { useLocation } from 'react-router-dom'\r\n\r\nexport function useLink(props: { href: string }) {\r\n const location = useLocation()\r\n const currentPath = location.pathname\r\n \r\n return {\r\n href: props.href,\r\n isActive: currentPath === props.href,\r\n }\r\n}","import type { LinkProps as ReactRouterLinkProps } from 'react-router-dom'\r\nimport { Link as ReactRouterLink } from 'react-router-dom'\r\n\r\nexport type LinkProps = ReactRouterLinkProps\r\n\r\nexport const Link = ReactRouterLink\r\n\r\nexport { useLink } from './hooks/use-links'\r\n","import { manifest, basePath as configBasePath } from 'virtual:routes'\r\nimport { RouterLayout } from './router-layout'\r\nimport type { RouterProviderProps } from './types/types'\r\n\r\nexport default function RouterProvider({\r\n\tchildren,\r\n\tpreloader,\r\n\tbasePath,\r\n}: Readonly<RouterProviderProps>) {\r\n\t// Используем basePath из пропсов, если указан, иначе из конфигурации\r\n\tconst finalBasePath = basePath ?? configBasePath ?? '/'\r\n\t\r\n\treturn (\r\n\t\t<RouterLayout manifest={manifest} preloader={preloader} basePath={finalBasePath}>\r\n\t\t\t{children}\r\n\t\t</RouterLayout>\r\n\t)\r\n}\r\n","import React from 'react'\r\nimport { BrowserRouter, Routes } from 'react-router-dom'\r\nimport { renderManifestAsRoutes } from './router-utils'\r\nimport type { RouterLayoutProps } from './types/types'\r\n\r\nexport const RouterLayout = ({\r\n\tmanifest,\r\n\tchildren,\r\n\tpreloader,\r\n\tbasePath = '/',\r\n}: RouterLayoutProps) => (\r\n\t<BrowserRouter basename={basePath}>\r\n\t\t<React.Suspense fallback={children || preloader || <div>Loading...</div>}>\r\n\t\t\t<Routes>{renderManifestAsRoutes(manifest)}</Routes>\r\n\t\t</React.Suspense>\r\n\t</BrowserRouter>\r\n)\r\n","import React from 'react'\r\nimport { Route } from 'react-router-dom'\r\nimport type { Node } from './types/types'\r\n\r\nfunction wrapLayouts(\r\n\tlayouts: Node['layouts'] | undefined,\r\n\tpageEl: React.ReactNode\r\n) {\r\n\tif (!layouts || layouts.length === 0) return pageEl\r\n\r\n\treturn layouts.reduceRight((child, loader) => {\r\n\t\tconst Layout = React.lazy(async () => {\r\n\t\t\tconst module = await loader()\r\n\t\t\t// Поддерживаем как default, так и именованный экспорт Layout\r\n\t\t\treturn 'default' in module ? module : { default: module.Layout }\r\n\t\t})\r\n\t\treturn <Layout>{child}</Layout>\r\n\t}, pageEl as React.ReactElement)\r\n}\r\n\r\nexport const renderManifestAsRoutes = (manifest: Node[]) => {\r\n\treturn manifest.map(n => {\r\n\t\tconst Page = React.lazy(async () => {\r\n\t\t\tconst module = await n.loader()\r\n\r\n\t\t\t// Если есть default экспорт, используем его\r\n\t\t\tif (\r\n\t\t\t\tmodule &&\r\n\t\t\t\ttypeof module === 'object' &&\r\n\t\t\t\t'default' in module &&\r\n\t\t\t\tmodule.default\r\n\t\t\t) {\r\n\t\t\t\treturn module as { default: React.ComponentType }\r\n\t\t\t}\r\n\r\n\t\t\t// Ищем любой именованный экспорт, который является функцией или компонентом\r\n\t\t\tif (module && typeof module === 'object') {\r\n\t\t\t\tconst namedExports = Object.keys(module).filter(\r\n\t\t\t\t\tkey => key !== 'default'\r\n\t\t\t\t)\r\n\t\t\t\tfor (const key of namedExports) {\r\n\t\t\t\t\tconst exportValue = module[key]\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof exportValue === 'function' ||\r\n\t\t\t\t\t\t(typeof exportValue === 'object' && exportValue !== null)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tdefault: exportValue as React.ComponentType,\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Если ничего не найдено, возвращаем ошибку\r\n\t\t\tconst availableExports =\r\n\t\t\t\tmodule && typeof module === 'object'\r\n\t\t\t\t\t? Object.keys(module).join(', ')\r\n\t\t\t\t\t: 'unknown'\r\n\t\t\tthrow new Error(\r\n\t\t\t\t`No valid export found in module for route ${n.path}. Available exports: ${availableExports}`\r\n\t\t\t)\r\n\t\t})\r\n\r\n\t\tconst element = wrapLayouts(n.layouts, <Page />)\r\n\t\treturn <Route key={n.id} path={n.path} element={element} />\r\n\t})\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,8BAA4B;AAErB,SAAS,QAAQ,OAAyB;AAC/C,QAAM,eAAW,qCAAY;AAC7B,QAAM,cAAc,SAAS;AAE7B,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,UAAU,gBAAgB,MAAM;AAAA,EAClC;AACF;;;ACTA,IAAAA,2BAAwC;AAIjC,IAAM,OAAO,yBAAAC;;;ACLpB,4BAAqD;;;ACArD,IAAAC,gBAAkB;AAClB,IAAAC,2BAAsC;;;ACDtC,mBAAkB;AAClB,IAAAC,2BAAsB;AAeb;AAZT,SAAS,YACR,SACA,QACC;AACD,MAAI,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;AAE7C,SAAO,QAAQ,YAAY,CAAC,OAAO,WAAW;AAC7C,UAAM,SAAS,aAAAC,QAAM,KAAK,YAAY;AACrC,YAAMC,UAAS,MAAM,OAAO;AAE5B,aAAO,aAAaA,UAASA,UAAS,EAAE,SAASA,QAAO,OAAO;AAAA,IAChE,CAAC;AACD,WAAO,4CAAC,UAAQ,iBAAM;AAAA,EACvB,GAAG,MAA4B;AAChC;AAEO,IAAM,yBAAyB,CAACC,cAAqB;AAC3D,SAAOA,UAAS,IAAI,OAAK;AACxB,UAAM,OAAO,aAAAF,QAAM,KAAK,YAAY;AACnC,YAAMC,UAAS,MAAM,EAAE,OAAO;AAG9B,UACCA,WACA,OAAOA,YAAW,YAClB,aAAaA,WACbA,QAAO,SACN;AACD,eAAOA;AAAA,MACR;AAGA,UAAIA,WAAU,OAAOA,YAAW,UAAU;AACzC,cAAM,eAAe,OAAO,KAAKA,OAAM,EAAE;AAAA,UACxC,SAAO,QAAQ;AAAA,QAChB;AACA,mBAAW,OAAO,cAAc;AAC/B,gBAAM,cAAcA,QAAO,GAAG;AAC9B,cACC,OAAO,gBAAgB,cACtB,OAAO,gBAAgB,YAAY,gBAAgB,MACnD;AACD,mBAAO;AAAA,cACN,SAAS;AAAA,YACV;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAGA,YAAM,mBACLA,WAAU,OAAOA,YAAW,WACzB,OAAO,KAAKA,OAAM,EAAE,KAAK,IAAI,IAC7B;AACJ,YAAM,IAAI;AAAA,QACT,6CAA6C,EAAE,IAAI,wBAAwB,gBAAgB;AAAA,MAC5F;AAAA,IACD,CAAC;AAED,UAAM,UAAU,YAAY,EAAE,SAAS,4CAAC,QAAK,CAAE;AAC/C,WAAO,4CAAC,kCAAiB,MAAM,EAAE,MAAM,WAApB,EAAE,EAAoC;AAAA,EAC1D,CAAC;AACF;;;ADtDqD,IAAAE,sBAAA;AAP9C,IAAM,eAAe,CAAC;AAAA,EAC5B,UAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACZ,MACC,6CAAC,0CAAc,UAAU,UACxB,uDAAC,cAAAC,QAAM,UAAN,EAAe,UAAU,YAAY,aAAa,6CAAC,SAAI,wBAAU,GACjE,uDAAC,mCAAQ,iCAAuBD,SAAQ,GAAE,GAC3C,GACD;;;ADFC,IAAAE,sBAAA;AATa,SAAR,eAAgC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACD,GAAkC;AAEjC,QAAM,gBAAgB,YAAY,sBAAAC,YAAkB;AAEpD,SACC,6CAAC,gBAAa,UAAU,gCAAU,WAAsB,UAAU,eAChE,UACF;AAEF;","names":["import_react_router_dom","ReactRouterLink","import_react","import_react_router_dom","import_react_router_dom","React","module","manifest","import_jsx_runtime","manifest","React","import_jsx_runtime","configBasePath"]}
package/dist/react.mjs CHANGED
@@ -1,3 +1,18 @@
1
+ // src/components/hooks/use-links.tsx
2
+ import { useLocation } from "react-router-dom";
3
+ function useLink(props) {
4
+ const location = useLocation();
5
+ const currentPath = location.pathname;
6
+ return {
7
+ href: props.href,
8
+ isActive: currentPath === props.href
9
+ };
10
+ }
11
+
12
+ // src/components/link.tsx
13
+ import { Link as ReactRouterLink } from "react-router-dom";
14
+ var Link = ReactRouterLink;
15
+
1
16
  // src/components/router-provider.tsx
2
17
  import { manifest, basePath as configBasePath } from "virtual:routes";
3
18
 
@@ -69,6 +84,8 @@ function RouterProvider({
69
84
  return /* @__PURE__ */ jsx3(RouterLayout, { manifest, preloader, basePath: finalBasePath, children });
70
85
  }
71
86
  export {
72
- RouterProvider
87
+ Link,
88
+ RouterProvider,
89
+ useLink
73
90
  };
74
91
  //# sourceMappingURL=react.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/router-provider.tsx","../src/components/router-layout.tsx","../src/components/router-utils.tsx"],"sourcesContent":["import { manifest, basePath as configBasePath } from 'virtual:routes'\r\nimport { RouterLayout } from './router-layout'\r\nimport type { RouterProviderProps } from './types/types'\r\n\r\nexport default function RouterProvider({\r\n\tchildren,\r\n\tpreloader,\r\n\tbasePath,\r\n}: Readonly<RouterProviderProps>) {\r\n\t// Используем basePath из пропсов, если указан, иначе из конфигурации\r\n\tconst finalBasePath = basePath ?? configBasePath ?? '/'\r\n\t\r\n\treturn (\r\n\t\t<RouterLayout manifest={manifest} preloader={preloader} basePath={finalBasePath}>\r\n\t\t\t{children}\r\n\t\t</RouterLayout>\r\n\t)\r\n}\r\n","import React from 'react'\r\nimport { BrowserRouter, Routes } from 'react-router-dom'\r\nimport { renderManifestAsRoutes } from './router-utils'\r\nimport type { RouterLayoutProps } from './types/types'\r\n\r\nexport const RouterLayout = ({\r\n\tmanifest,\r\n\tchildren,\r\n\tpreloader,\r\n\tbasePath = '/',\r\n}: RouterLayoutProps) => (\r\n\t<BrowserRouter basename={basePath}>\r\n\t\t<React.Suspense fallback={children || preloader || <div>Loading...</div>}>\r\n\t\t\t<Routes>{renderManifestAsRoutes(manifest)}</Routes>\r\n\t\t</React.Suspense>\r\n\t</BrowserRouter>\r\n)\r\n","import React from 'react'\r\nimport { Route } from 'react-router-dom'\r\nimport type { Node } from './types/types'\r\n\r\nfunction wrapLayouts(\r\n\tlayouts: Node['layouts'] | undefined,\r\n\tpageEl: React.ReactNode\r\n) {\r\n\tif (!layouts || layouts.length === 0) return pageEl\r\n\r\n\treturn layouts.reduceRight((child, loader) => {\r\n\t\tconst Layout = React.lazy(async () => {\r\n\t\t\tconst module = await loader()\r\n\t\t\t// Поддерживаем как default, так и именованный экспорт Layout\r\n\t\t\treturn 'default' in module ? module : { default: module.Layout }\r\n\t\t})\r\n\t\treturn <Layout>{child}</Layout>\r\n\t}, pageEl as React.ReactElement)\r\n}\r\n\r\nexport const renderManifestAsRoutes = (manifest: Node[]) => {\r\n\treturn manifest.map(n => {\r\n\t\tconst Page = React.lazy(async () => {\r\n\t\t\tconst module = await n.loader()\r\n\r\n\t\t\t// Если есть default экспорт, используем его\r\n\t\t\tif (\r\n\t\t\t\tmodule &&\r\n\t\t\t\ttypeof module === 'object' &&\r\n\t\t\t\t'default' in module &&\r\n\t\t\t\tmodule.default\r\n\t\t\t) {\r\n\t\t\t\treturn module as { default: React.ComponentType }\r\n\t\t\t}\r\n\r\n\t\t\t// Ищем любой именованный экспорт, который является функцией или компонентом\r\n\t\t\tif (module && typeof module === 'object') {\r\n\t\t\t\tconst namedExports = Object.keys(module).filter(\r\n\t\t\t\t\tkey => key !== 'default'\r\n\t\t\t\t)\r\n\t\t\t\tfor (const key of namedExports) {\r\n\t\t\t\t\tconst exportValue = module[key]\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof exportValue === 'function' ||\r\n\t\t\t\t\t\t(typeof exportValue === 'object' && exportValue !== null)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tdefault: exportValue as React.ComponentType,\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Если ничего не найдено, возвращаем ошибку\r\n\t\t\tconst availableExports =\r\n\t\t\t\tmodule && typeof module === 'object'\r\n\t\t\t\t\t? Object.keys(module).join(', ')\r\n\t\t\t\t\t: 'unknown'\r\n\t\t\tthrow new Error(\r\n\t\t\t\t`No valid export found in module for route ${n.path}. Available exports: ${availableExports}`\r\n\t\t\t)\r\n\t\t})\r\n\r\n\t\tconst element = wrapLayouts(n.layouts, <Page />)\r\n\t\treturn <Route key={n.id} path={n.path} element={element} />\r\n\t})\r\n}\r\n"],"mappings":";AAAA,SAAS,UAAU,YAAY,sBAAsB;;;ACArD,OAAOA,YAAW;AAClB,SAAS,eAAe,cAAc;;;ACDtC,OAAO,WAAW;AAClB,SAAS,aAAa;AAeb;AAZT,SAAS,YACR,SACA,QACC;AACD,MAAI,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;AAE7C,SAAO,QAAQ,YAAY,CAAC,OAAO,WAAW;AAC7C,UAAM,SAAS,MAAM,KAAK,YAAY;AACrC,YAAM,SAAS,MAAM,OAAO;AAE5B,aAAO,aAAa,SAAS,SAAS,EAAE,SAAS,OAAO,OAAO;AAAA,IAChE,CAAC;AACD,WAAO,oBAAC,UAAQ,iBAAM;AAAA,EACvB,GAAG,MAA4B;AAChC;AAEO,IAAM,yBAAyB,CAACC,cAAqB;AAC3D,SAAOA,UAAS,IAAI,OAAK;AACxB,UAAM,OAAO,MAAM,KAAK,YAAY;AACnC,YAAM,SAAS,MAAM,EAAE,OAAO;AAG9B,UACC,UACA,OAAO,WAAW,YAClB,aAAa,UACb,OAAO,SACN;AACD,eAAO;AAAA,MACR;AAGA,UAAI,UAAU,OAAO,WAAW,UAAU;AACzC,cAAM,eAAe,OAAO,KAAK,MAAM,EAAE;AAAA,UACxC,SAAO,QAAQ;AAAA,QAChB;AACA,mBAAW,OAAO,cAAc;AAC/B,gBAAM,cAAc,OAAO,GAAG;AAC9B,cACC,OAAO,gBAAgB,cACtB,OAAO,gBAAgB,YAAY,gBAAgB,MACnD;AACD,mBAAO;AAAA,cACN,SAAS;AAAA,YACV;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAGA,YAAM,mBACL,UAAU,OAAO,WAAW,WACzB,OAAO,KAAK,MAAM,EAAE,KAAK,IAAI,IAC7B;AACJ,YAAM,IAAI;AAAA,QACT,6CAA6C,EAAE,IAAI,wBAAwB,gBAAgB;AAAA,MAC5F;AAAA,IACD,CAAC;AAED,UAAM,UAAU,YAAY,EAAE,SAAS,oBAAC,QAAK,CAAE;AAC/C,WAAO,oBAAC,SAAiB,MAAM,EAAE,MAAM,WAApB,EAAE,EAAoC;AAAA,EAC1D,CAAC;AACF;;;ADtDqD,gBAAAC,YAAA;AAP9C,IAAM,eAAe,CAAC;AAAA,EAC5B,UAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACZ,MACC,gBAAAD,KAAC,iBAAc,UAAU,UACxB,0BAAAA,KAACE,OAAM,UAAN,EAAe,UAAU,YAAY,aAAa,gBAAAF,KAAC,SAAI,wBAAU,GACjE,0BAAAA,KAAC,UAAQ,iCAAuBC,SAAQ,GAAE,GAC3C,GACD;;;ADFC,gBAAAE,YAAA;AATa,SAAR,eAAgC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACD,GAAkC;AAEjC,QAAM,gBAAgB,YAAY,kBAAkB;AAEpD,SACC,gBAAAA,KAAC,gBAAa,UAAoB,WAAsB,UAAU,eAChE,UACF;AAEF;","names":["React","manifest","jsx","manifest","React","jsx"]}
1
+ {"version":3,"sources":["../src/components/hooks/use-links.tsx","../src/components/link.tsx","../src/components/router-provider.tsx","../src/components/router-layout.tsx","../src/components/router-utils.tsx"],"sourcesContent":["import { useLocation } from 'react-router-dom'\r\n\r\nexport function useLink(props: { href: string }) {\r\n const location = useLocation()\r\n const currentPath = location.pathname\r\n \r\n return {\r\n href: props.href,\r\n isActive: currentPath === props.href,\r\n }\r\n}","import type { LinkProps as ReactRouterLinkProps } from 'react-router-dom'\r\nimport { Link as ReactRouterLink } from 'react-router-dom'\r\n\r\nexport type LinkProps = ReactRouterLinkProps\r\n\r\nexport const Link = ReactRouterLink\r\n\r\nexport { useLink } from './hooks/use-links'\r\n","import { manifest, basePath as configBasePath } from 'virtual:routes'\r\nimport { RouterLayout } from './router-layout'\r\nimport type { RouterProviderProps } from './types/types'\r\n\r\nexport default function RouterProvider({\r\n\tchildren,\r\n\tpreloader,\r\n\tbasePath,\r\n}: Readonly<RouterProviderProps>) {\r\n\t// Используем basePath из пропсов, если указан, иначе из конфигурации\r\n\tconst finalBasePath = basePath ?? configBasePath ?? '/'\r\n\t\r\n\treturn (\r\n\t\t<RouterLayout manifest={manifest} preloader={preloader} basePath={finalBasePath}>\r\n\t\t\t{children}\r\n\t\t</RouterLayout>\r\n\t)\r\n}\r\n","import React from 'react'\r\nimport { BrowserRouter, Routes } from 'react-router-dom'\r\nimport { renderManifestAsRoutes } from './router-utils'\r\nimport type { RouterLayoutProps } from './types/types'\r\n\r\nexport const RouterLayout = ({\r\n\tmanifest,\r\n\tchildren,\r\n\tpreloader,\r\n\tbasePath = '/',\r\n}: RouterLayoutProps) => (\r\n\t<BrowserRouter basename={basePath}>\r\n\t\t<React.Suspense fallback={children || preloader || <div>Loading...</div>}>\r\n\t\t\t<Routes>{renderManifestAsRoutes(manifest)}</Routes>\r\n\t\t</React.Suspense>\r\n\t</BrowserRouter>\r\n)\r\n","import React from 'react'\r\nimport { Route } from 'react-router-dom'\r\nimport type { Node } from './types/types'\r\n\r\nfunction wrapLayouts(\r\n\tlayouts: Node['layouts'] | undefined,\r\n\tpageEl: React.ReactNode\r\n) {\r\n\tif (!layouts || layouts.length === 0) return pageEl\r\n\r\n\treturn layouts.reduceRight((child, loader) => {\r\n\t\tconst Layout = React.lazy(async () => {\r\n\t\t\tconst module = await loader()\r\n\t\t\t// Поддерживаем как default, так и именованный экспорт Layout\r\n\t\t\treturn 'default' in module ? module : { default: module.Layout }\r\n\t\t})\r\n\t\treturn <Layout>{child}</Layout>\r\n\t}, pageEl as React.ReactElement)\r\n}\r\n\r\nexport const renderManifestAsRoutes = (manifest: Node[]) => {\r\n\treturn manifest.map(n => {\r\n\t\tconst Page = React.lazy(async () => {\r\n\t\t\tconst module = await n.loader()\r\n\r\n\t\t\t// Если есть default экспорт, используем его\r\n\t\t\tif (\r\n\t\t\t\tmodule &&\r\n\t\t\t\ttypeof module === 'object' &&\r\n\t\t\t\t'default' in module &&\r\n\t\t\t\tmodule.default\r\n\t\t\t) {\r\n\t\t\t\treturn module as { default: React.ComponentType }\r\n\t\t\t}\r\n\r\n\t\t\t// Ищем любой именованный экспорт, который является функцией или компонентом\r\n\t\t\tif (module && typeof module === 'object') {\r\n\t\t\t\tconst namedExports = Object.keys(module).filter(\r\n\t\t\t\t\tkey => key !== 'default'\r\n\t\t\t\t)\r\n\t\t\t\tfor (const key of namedExports) {\r\n\t\t\t\t\tconst exportValue = module[key]\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof exportValue === 'function' ||\r\n\t\t\t\t\t\t(typeof exportValue === 'object' && exportValue !== null)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tdefault: exportValue as React.ComponentType,\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Если ничего не найдено, возвращаем ошибку\r\n\t\t\tconst availableExports =\r\n\t\t\t\tmodule && typeof module === 'object'\r\n\t\t\t\t\t? Object.keys(module).join(', ')\r\n\t\t\t\t\t: 'unknown'\r\n\t\t\tthrow new Error(\r\n\t\t\t\t`No valid export found in module for route ${n.path}. Available exports: ${availableExports}`\r\n\t\t\t)\r\n\t\t})\r\n\r\n\t\tconst element = wrapLayouts(n.layouts, <Page />)\r\n\t\treturn <Route key={n.id} path={n.path} element={element} />\r\n\t})\r\n}\r\n"],"mappings":";AAAA,SAAS,mBAAmB;AAErB,SAAS,QAAQ,OAAyB;AAC/C,QAAM,WAAW,YAAY;AAC7B,QAAM,cAAc,SAAS;AAE7B,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,UAAU,gBAAgB,MAAM;AAAA,EAClC;AACF;;;ACTA,SAAS,QAAQ,uBAAuB;AAIjC,IAAM,OAAO;;;ACLpB,SAAS,UAAU,YAAY,sBAAsB;;;ACArD,OAAOA,YAAW;AAClB,SAAS,eAAe,cAAc;;;ACDtC,OAAO,WAAW;AAClB,SAAS,aAAa;AAeb;AAZT,SAAS,YACR,SACA,QACC;AACD,MAAI,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;AAE7C,SAAO,QAAQ,YAAY,CAAC,OAAO,WAAW;AAC7C,UAAM,SAAS,MAAM,KAAK,YAAY;AACrC,YAAM,SAAS,MAAM,OAAO;AAE5B,aAAO,aAAa,SAAS,SAAS,EAAE,SAAS,OAAO,OAAO;AAAA,IAChE,CAAC;AACD,WAAO,oBAAC,UAAQ,iBAAM;AAAA,EACvB,GAAG,MAA4B;AAChC;AAEO,IAAM,yBAAyB,CAACC,cAAqB;AAC3D,SAAOA,UAAS,IAAI,OAAK;AACxB,UAAM,OAAO,MAAM,KAAK,YAAY;AACnC,YAAM,SAAS,MAAM,EAAE,OAAO;AAG9B,UACC,UACA,OAAO,WAAW,YAClB,aAAa,UACb,OAAO,SACN;AACD,eAAO;AAAA,MACR;AAGA,UAAI,UAAU,OAAO,WAAW,UAAU;AACzC,cAAM,eAAe,OAAO,KAAK,MAAM,EAAE;AAAA,UACxC,SAAO,QAAQ;AAAA,QAChB;AACA,mBAAW,OAAO,cAAc;AAC/B,gBAAM,cAAc,OAAO,GAAG;AAC9B,cACC,OAAO,gBAAgB,cACtB,OAAO,gBAAgB,YAAY,gBAAgB,MACnD;AACD,mBAAO;AAAA,cACN,SAAS;AAAA,YACV;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAGA,YAAM,mBACL,UAAU,OAAO,WAAW,WACzB,OAAO,KAAK,MAAM,EAAE,KAAK,IAAI,IAC7B;AACJ,YAAM,IAAI;AAAA,QACT,6CAA6C,EAAE,IAAI,wBAAwB,gBAAgB;AAAA,MAC5F;AAAA,IACD,CAAC;AAED,UAAM,UAAU,YAAY,EAAE,SAAS,oBAAC,QAAK,CAAE;AAC/C,WAAO,oBAAC,SAAiB,MAAM,EAAE,MAAM,WAApB,EAAE,EAAoC;AAAA,EAC1D,CAAC;AACF;;;ADtDqD,gBAAAC,YAAA;AAP9C,IAAM,eAAe,CAAC;AAAA,EAC5B,UAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACZ,MACC,gBAAAD,KAAC,iBAAc,UAAU,UACxB,0BAAAA,KAACE,OAAM,UAAN,EAAe,UAAU,YAAY,aAAa,gBAAAF,KAAC,SAAI,wBAAU,GACjE,0BAAAA,KAAC,UAAQ,iCAAuBC,SAAQ,GAAE,GAC3C,GACD;;;ADFC,gBAAAE,YAAA;AATa,SAAR,eAAgC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACD,GAAkC;AAEjC,QAAM,gBAAgB,YAAY,kBAAkB;AAEpD,SACC,gBAAAA,KAAC,gBAAa,UAAoB,WAAsB,UAAU,eAChE,UACF;AAEF;","names":["React","manifest","jsx","manifest","React","jsx"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "path-rush",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "A simple and powerful plugin for Vite with file-based routing",
5
5
  "main": "dist/plugin.js",
6
6
  "module": "dist/plugin.mjs",