reactive-route 0.0.1-alpha.7 → 0.0.1-alpha.9

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.
@@ -99,9 +99,8 @@ function RouterInner(props) {
99
99
  if (LoadedComponent) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoadedComponent, { ...config.currentProps });
100
100
  return null;
101
101
  }
102
- var Router = (0, import_react.memo)(
103
- (props) => {
104
- const Component = props.routerStore.adapters.observer ? props.routerStore.adapters.observer(RouterInner) : RouterInner;
105
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { ...props });
106
- }
107
- );
102
+ function RouterWrapper(props) {
103
+ const Component = props.routerStore.adapters.observer ? props.routerStore.adapters.observer(RouterInner) : RouterInner;
104
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { ...props });
105
+ }
106
+ var Router = (0, import_react.memo)(RouterWrapper);
@@ -28,102 +28,74 @@ module.exports = __toCommonJS(solid_exports);
28
28
  var import_web = require("solid-js/web");
29
29
  var import_web2 = require("solid-js/web");
30
30
  var import_reactive_route = require("reactive-route");
31
- var import_solid_js2 = require("solid-js");
32
- var import_web3 = require("solid-js/web");
33
-
34
- // packages/solid/useStore.ts
35
31
  var import_solid_js = require("solid-js");
36
- function useStore(ViewModel, props) {
37
- const vm = new ViewModel(props);
38
- vm.beforeMount?.();
39
- (0, import_solid_js.onMount)(() => {
40
- vm.afterMount?.();
32
+ var import_web3 = require("solid-js/web");
33
+ function Router(props) {
34
+ const config = props.routerStore.adapters.makeObservable({
35
+ loadedComponentName: void 0,
36
+ loadedComponentPage: void 0,
37
+ currentProps: {}
41
38
  });
42
- return vm;
43
- }
44
-
45
- // packages/solid/Router.tsx
46
- var VM = class {
47
- constructor(props) {
48
- this.props = props;
49
- return this.adapters.makeAutoObservable(this);
50
- }
51
- loadedComponentName = void 0;
52
- loadedComponentPage = void 0;
53
- currentProps = {};
54
- get adapters() {
55
- return this.props.routerStore.adapters;
56
- }
57
- beforeMount() {
58
- this.props.beforeMount?.();
59
- this.redirectOnHistoryPop();
60
- this.adapters.autorun(() => this.setLoadedComponent());
61
- }
62
- redirectOnHistoryPop() {
39
+ function redirectOnHistoryPop() {
63
40
  if (!import_reactive_route.history) return;
64
41
  import_reactive_route.history.listen((params) => {
65
42
  if (params.action !== "POP") return;
66
- const previousRoutePathname = this.props.routerStore.routesHistory[this.props.routerStore.routesHistory.length - 2];
43
+ const previousRoutePathname = props.routerStore.routesHistory[props.routerStore.routesHistory.length - 2];
67
44
  if (previousRoutePathname === params.location.pathname) {
68
- this.props.routerStore.routesHistory.pop();
45
+ props.routerStore.routesHistory.pop();
69
46
  }
70
- void this.props.routerStore.redirectTo({
47
+ void props.routerStore.redirectTo({
71
48
  noHistoryPush: true,
72
49
  ...(0, import_reactive_route.getInitialRoute)({
73
- routes: this.props.routes,
50
+ routes: props.routes,
74
51
  pathname: import_reactive_route.history.location.pathname,
75
52
  fallback: "error404"
76
53
  })
77
54
  });
78
55
  });
79
56
  }
80
- setLoadedComponent() {
81
- const currentRouteName = this.props.routerStore.currentRoute.name;
82
- const currentRoutePage = this.props.routerStore.currentRoute.pageName;
57
+ function setLoadedComponent() {
58
+ const currentRouteName = props.routerStore.currentRoute.name;
59
+ const currentRoutePage = props.routerStore.currentRoute.pageName;
60
+ const componentConfig = props.routes[currentRouteName];
83
61
  let preventRedirect = false;
84
- if (this.props.routerStore.isRedirecting) preventRedirect = true;
85
- else if (this.loadedComponentName === currentRouteName) {
62
+ if (props.routerStore.isRedirecting) preventRedirect = true;
63
+ else if (config.loadedComponentName === currentRouteName) {
86
64
  preventRedirect = true;
87
- } else if (this.loadedComponentPage != null && currentRouteName != null) {
88
- if (this.loadedComponentPage === currentRoutePage) {
89
- const componentConfig = this.props.routes[currentRouteName];
90
- this.adapters.replaceObject(this.currentProps, "props" in componentConfig ? componentConfig.props : {});
65
+ } else if (config.loadedComponentPage != null && currentRouteName != null) {
66
+ if (config.loadedComponentPage === currentRoutePage) {
67
+ props.routerStore.adapters.replaceObject(config.currentProps, "props" in componentConfig ? componentConfig.props : {});
91
68
  preventRedirect = true;
92
69
  }
93
70
  }
94
71
  if (preventRedirect) return;
95
- this.adapters.batch(() => {
96
- if (!this.loadedComponentName) {
97
- this.setComponent();
98
- } else {
99
- this.props.beforeUpdatePageComponent?.();
100
- this.setComponent();
72
+ props.routerStore.adapters.batch(() => {
73
+ if (config.loadedComponentName) {
74
+ props.beforeUpdatePageComponent?.();
101
75
  }
76
+ props.beforeSetPageComponent?.(componentConfig);
77
+ props.routerStore.adapters.batch(() => {
78
+ props.routerStore.adapters.replaceObject(config.currentProps, "props" in componentConfig ? componentConfig.props : {});
79
+ config.loadedComponentName = currentRouteName;
80
+ config.loadedComponentPage = componentConfig.pageName;
81
+ config[Symbol.for("$adm")]?.batch();
82
+ });
102
83
  });
103
84
  }
104
- setComponent() {
105
- const currentRouteName = this.props.routerStore.currentRoute.name;
106
- const componentConfig = this.props.routes[currentRouteName];
107
- this.props.beforeSetPageComponent?.(componentConfig);
108
- this.adapters.batch(() => {
109
- this.adapters.replaceObject(this.currentProps, "props" in componentConfig ? componentConfig.props : {});
110
- this.loadedComponentName = currentRouteName;
111
- this.loadedComponentPage = componentConfig.pageName;
112
- });
113
- }
114
- };
115
- function Router(props) {
116
- const vm = useStore(VM, props);
117
- return (0, import_web.createComponent)(import_solid_js2.Show, {
85
+ props.beforeMount?.();
86
+ redirectOnHistoryPop();
87
+ setLoadedComponent();
88
+ props.routerStore.adapters.autorun(() => setLoadedComponent());
89
+ return (0, import_web.createComponent)(import_solid_js.Show, {
118
90
  get when() {
119
- return vm.loadedComponentName;
91
+ return config.loadedComponentName;
120
92
  },
121
93
  get children() {
122
94
  return (0, import_web.createComponent)(import_web3.Dynamic, (0, import_web2.mergeProps)({
123
95
  get component() {
124
- return props.routes[vm.loadedComponentName]?.component || void 0;
96
+ return props.routes[config.loadedComponentName]?.component || void 0;
125
97
  }
126
- }, () => vm.currentProps));
98
+ }, () => config.currentProps));
127
99
  }
128
100
  });
129
101
  }
@@ -73,12 +73,11 @@ function RouterInner(props) {
73
73
  if (LoadedComponent) return /* @__PURE__ */ jsx(LoadedComponent, { ...config.currentProps });
74
74
  return null;
75
75
  }
76
- var Router = memo(
77
- (props) => {
78
- const Component = props.routerStore.adapters.observer ? props.routerStore.adapters.observer(RouterInner) : RouterInner;
79
- return /* @__PURE__ */ jsx(Component, { ...props });
80
- }
81
- );
76
+ function RouterWrapper(props) {
77
+ const Component = props.routerStore.adapters.observer ? props.routerStore.adapters.observer(RouterInner) : RouterInner;
78
+ return /* @__PURE__ */ jsx(Component, { ...props });
79
+ }
80
+ var Router = memo(RouterWrapper);
82
81
  export {
83
82
  Router
84
83
  };
@@ -4,100 +4,72 @@ import { mergeProps as _$mergeProps } from "solid-js/web";
4
4
  import { getInitialRoute, history } from "reactive-route";
5
5
  import { Show } from "solid-js";
6
6
  import { Dynamic } from "solid-js/web";
7
-
8
- // packages/solid/useStore.ts
9
- import { onMount } from "solid-js";
10
- function useStore(ViewModel, props) {
11
- const vm = new ViewModel(props);
12
- vm.beforeMount?.();
13
- onMount(() => {
14
- vm.afterMount?.();
7
+ function Router(props) {
8
+ const config = props.routerStore.adapters.makeObservable({
9
+ loadedComponentName: void 0,
10
+ loadedComponentPage: void 0,
11
+ currentProps: {}
15
12
  });
16
- return vm;
17
- }
18
-
19
- // packages/solid/Router.tsx
20
- var VM = class {
21
- constructor(props) {
22
- this.props = props;
23
- return this.adapters.makeAutoObservable(this);
24
- }
25
- loadedComponentName = void 0;
26
- loadedComponentPage = void 0;
27
- currentProps = {};
28
- get adapters() {
29
- return this.props.routerStore.adapters;
30
- }
31
- beforeMount() {
32
- this.props.beforeMount?.();
33
- this.redirectOnHistoryPop();
34
- this.adapters.autorun(() => this.setLoadedComponent());
35
- }
36
- redirectOnHistoryPop() {
13
+ function redirectOnHistoryPop() {
37
14
  if (!history) return;
38
15
  history.listen((params) => {
39
16
  if (params.action !== "POP") return;
40
- const previousRoutePathname = this.props.routerStore.routesHistory[this.props.routerStore.routesHistory.length - 2];
17
+ const previousRoutePathname = props.routerStore.routesHistory[props.routerStore.routesHistory.length - 2];
41
18
  if (previousRoutePathname === params.location.pathname) {
42
- this.props.routerStore.routesHistory.pop();
19
+ props.routerStore.routesHistory.pop();
43
20
  }
44
- void this.props.routerStore.redirectTo({
21
+ void props.routerStore.redirectTo({
45
22
  noHistoryPush: true,
46
23
  ...getInitialRoute({
47
- routes: this.props.routes,
24
+ routes: props.routes,
48
25
  pathname: history.location.pathname,
49
26
  fallback: "error404"
50
27
  })
51
28
  });
52
29
  });
53
30
  }
54
- setLoadedComponent() {
55
- const currentRouteName = this.props.routerStore.currentRoute.name;
56
- const currentRoutePage = this.props.routerStore.currentRoute.pageName;
31
+ function setLoadedComponent() {
32
+ const currentRouteName = props.routerStore.currentRoute.name;
33
+ const currentRoutePage = props.routerStore.currentRoute.pageName;
34
+ const componentConfig = props.routes[currentRouteName];
57
35
  let preventRedirect = false;
58
- if (this.props.routerStore.isRedirecting) preventRedirect = true;
59
- else if (this.loadedComponentName === currentRouteName) {
36
+ if (props.routerStore.isRedirecting) preventRedirect = true;
37
+ else if (config.loadedComponentName === currentRouteName) {
60
38
  preventRedirect = true;
61
- } else if (this.loadedComponentPage != null && currentRouteName != null) {
62
- if (this.loadedComponentPage === currentRoutePage) {
63
- const componentConfig = this.props.routes[currentRouteName];
64
- this.adapters.replaceObject(this.currentProps, "props" in componentConfig ? componentConfig.props : {});
39
+ } else if (config.loadedComponentPage != null && currentRouteName != null) {
40
+ if (config.loadedComponentPage === currentRoutePage) {
41
+ props.routerStore.adapters.replaceObject(config.currentProps, "props" in componentConfig ? componentConfig.props : {});
65
42
  preventRedirect = true;
66
43
  }
67
44
  }
68
45
  if (preventRedirect) return;
69
- this.adapters.batch(() => {
70
- if (!this.loadedComponentName) {
71
- this.setComponent();
72
- } else {
73
- this.props.beforeUpdatePageComponent?.();
74
- this.setComponent();
46
+ props.routerStore.adapters.batch(() => {
47
+ if (config.loadedComponentName) {
48
+ props.beforeUpdatePageComponent?.();
75
49
  }
50
+ props.beforeSetPageComponent?.(componentConfig);
51
+ props.routerStore.adapters.batch(() => {
52
+ props.routerStore.adapters.replaceObject(config.currentProps, "props" in componentConfig ? componentConfig.props : {});
53
+ config.loadedComponentName = currentRouteName;
54
+ config.loadedComponentPage = componentConfig.pageName;
55
+ config[Symbol.for("$adm")]?.batch();
56
+ });
76
57
  });
77
58
  }
78
- setComponent() {
79
- const currentRouteName = this.props.routerStore.currentRoute.name;
80
- const componentConfig = this.props.routes[currentRouteName];
81
- this.props.beforeSetPageComponent?.(componentConfig);
82
- this.adapters.batch(() => {
83
- this.adapters.replaceObject(this.currentProps, "props" in componentConfig ? componentConfig.props : {});
84
- this.loadedComponentName = currentRouteName;
85
- this.loadedComponentPage = componentConfig.pageName;
86
- });
87
- }
88
- };
89
- function Router(props) {
90
- const vm = useStore(VM, props);
59
+ props.beforeMount?.();
60
+ redirectOnHistoryPop();
61
+ setLoadedComponent();
62
+ props.routerStore.adapters.autorun(() => setLoadedComponent());
91
63
  return _$createComponent(Show, {
92
64
  get when() {
93
- return vm.loadedComponentName;
65
+ return config.loadedComponentName;
94
66
  },
95
67
  get children() {
96
68
  return _$createComponent(Dynamic, _$mergeProps({
97
69
  get component() {
98
- return props.routes[vm.loadedComponentName]?.component || void 0;
70
+ return props.routes[config.loadedComponentName]?.component || void 0;
99
71
  }
100
- }, () => vm.currentProps));
72
+ }, () => config.currentProps));
101
73
  }
102
74
  });
103
75
  }
@@ -1,3 +1,5 @@
1
1
  import { TypePropsRouter, TypeRoute } from 'reactive-route';
2
- export declare const Router: import("react").MemoExoticComponent<(<TRoutes extends Record<string, TypeRoute>>(props: TypePropsRouter<TRoutes>) => any)>;
2
+ declare function RouterWrapper<TRoutes extends Record<string, TypeRoute>>(props: TypePropsRouter<TRoutes>): any;
3
+ export declare const Router: typeof RouterWrapper;
4
+ export {};
3
5
  //# sourceMappingURL=Router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../../packages/react/Router.tsx"],"names":[],"mappings":"AACA,OAAO,EAA4B,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AA4HtF,eAAO,MAAM,MAAM,wCAChB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,eAAe,CAAC,OAAO,CAAC,KAKpC,GAAG,EAE3C,CAAC"}
1
+ {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../../packages/react/Router.tsx"],"names":[],"mappings":"AACA,OAAO,EAA4B,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAwGtF,iBAAS,aAAa,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAK1D,GAAG,CACzC;AAED,eAAO,MAAM,MAAM,EAA0B,OAAO,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../../packages/solid/Router.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAmGtF,wBAAgB,MAAM,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,kCAWhG"}
1
+ {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../../packages/solid/Router.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAItF,wBAAgB,MAAM,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,kCA6FhG"}
@@ -1 +1 @@
1
- {"root":["../../packages/adapters/kr-observable.ts","../../packages/adapters/mobx.ts","../../packages/adapters/solid.ts","../../packages/core/createRouterConfig.ts","../../packages/core/createRouterStore.ts","../../packages/core/index.ts","../../packages/core/types/InterfaceRouterStore.ts","../../packages/core/types/TypeCurrentRoute.ts","../../packages/core/types/TypeLifecycleConfig.ts","../../packages/core/types/TypePropsRouter.ts","../../packages/core/types/TypeRedirectToParams.ts","../../packages/core/types/TypeRoute.ts","../../packages/core/types/TypeRouteRaw.ts","../../packages/core/types/TypeRouteWithParams.ts","../../packages/core/types/TypeValidator.ts","../../packages/core/utils/addNames.ts","../../packages/core/utils/constants.ts","../../packages/core/utils/dynamic.ts","../../packages/core/utils/findRouteByPathname.ts","../../packages/core/utils/getDynamicValues.ts","../../packages/core/utils/getInitialRoute.ts","../../packages/core/utils/getQueryValues.ts","../../packages/core/utils/getTypedEntries.ts","../../packages/core/utils/history.ts","../../packages/core/utils/loadComponentToConfig.ts","../../packages/core/utils/replaceDynamicValues.ts","../../packages/react/Router.tsx","../../packages/react/index.ts","../../packages/solid/Router.tsx","../../packages/solid/index.ts","../../packages/solid/useStore.ts"],"version":"5.9.2"}
1
+ {"root":["../../packages/adapters/kr-observable.ts","../../packages/adapters/mobx.ts","../../packages/adapters/solid.ts","../../packages/core/createRouterConfig.ts","../../packages/core/createRouterStore.ts","../../packages/core/index.ts","../../packages/core/types/InterfaceRouterStore.ts","../../packages/core/types/TypeCurrentRoute.ts","../../packages/core/types/TypeLifecycleConfig.ts","../../packages/core/types/TypePropsRouter.ts","../../packages/core/types/TypeRedirectToParams.ts","../../packages/core/types/TypeRoute.ts","../../packages/core/types/TypeRouteRaw.ts","../../packages/core/types/TypeRouteWithParams.ts","../../packages/core/types/TypeValidator.ts","../../packages/core/utils/addNames.ts","../../packages/core/utils/constants.ts","../../packages/core/utils/dynamic.ts","../../packages/core/utils/findRouteByPathname.ts","../../packages/core/utils/getDynamicValues.ts","../../packages/core/utils/getInitialRoute.ts","../../packages/core/utils/getQueryValues.ts","../../packages/core/utils/getTypedEntries.ts","../../packages/core/utils/history.ts","../../packages/core/utils/loadComponentToConfig.ts","../../packages/core/utils/replaceDynamicValues.ts","../../packages/react/Router.tsx","../../packages/react/index.ts"],"version":"5.9.2"}
@@ -0,0 +1 @@
1
+ {"root":["../../packages/solid/Router.tsx","../../packages/solid/index.ts"],"version":"5.9.2"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "reactive-route",
3
3
  "author": "Dmitry Kazakov",
4
4
  "license": "MIT",
5
- "version": "0.0.1-alpha.7",
5
+ "version": "0.0.1-alpha.9",
6
6
  "description": "Reactive Router for different frameworks",
7
7
  "repository": {
8
8
  "type": "git",
@@ -10,14 +10,14 @@
10
10
  },
11
11
  "scripts": {
12
12
  "upd": "rm -rf ./node_modules&&pnpm i --prefer-offline",
13
- "build": "rm -rf ./dist&&node --import tsx ./scripts/build.ts&&tsc -b ./tsconfig.types.json",
13
+ "build": "rm -rf ./dist&&node --import tsx ./scripts/build.ts&&tsc -b ./tsconfig.types.react.json&&tsc -b ./tsconfig.types.solid.json",
14
14
  "test": "vitest run&&node --import tsx ./scripts/genCoverageBadge.ts",
15
15
  "test-watch": "vitest --coverage=false",
16
16
  "npm-publish": "pnpm run build&&pnpm run test&&npm publish --access public",
17
17
  "analyze:js": "biome check --no-errors-on-unmatched .",
18
18
  "format:js": "biome check --no-errors-on-unmatched --write",
19
- "check-types": "tsc --project tsconfig.json",
20
- "check-types-example": "tsc --project examples/react-mobx/tsconfig.json",
19
+ "check-types": "tsc --project tsconfig.json&&tsc --project tsconfig.solid.json",
20
+ "check-types-example": "tsc --project examples/react/tsconfig.json",
21
21
  "prepare": "husky",
22
22
  "docs:dev": "vitepress dev docs",
23
23
  "docs:build": "vitepress build docs",
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "include": ["packages/solid"],
4
+ "exclude": ["packages/solid/test"],
5
+ "compilerOptions": {
6
+ "jsx": "preserve",
7
+ "jsxImportSource": "solid-js"
8
+ }
9
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "include": ["packages"],
4
+ "compilerOptions": {
5
+ "outDir": "./dist/types",
6
+ "noEmit": false,
7
+ "declaration": true,
8
+ "declarationMap": true,
9
+ "emitDeclarationOnly": true
10
+ }
11
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "include": ["packages/solid"],
4
+ "exclude": ["packages/solid/test"],
5
+ "compilerOptions": {
6
+ "outDir": "./dist/types",
7
+ "jsx": "preserve",
8
+ "jsxImportSource": "solid-js",
9
+ "noEmit": false,
10
+ "declaration": true,
11
+ "declarationMap": true,
12
+ "emitDeclarationOnly": true
13
+ }
14
+ }
@@ -1,7 +0,0 @@
1
- export interface ViewModelConstructor {
2
- props?: Record<string, any>;
3
- beforeMount?: () => void;
4
- afterMount?: () => void;
5
- }
6
- export declare function useStore<TViewModel extends new (props: ConstructorParameters<TViewModel>[0]) => ViewModelConstructor>(ViewModel: TViewModel, props: ConstructorParameters<TViewModel>[0]): InstanceType<TViewModel>;
7
- //# sourceMappingURL=useStore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useStore.d.ts","sourceRoot":"","sources":["../../../packages/solid/useStore.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,QAAQ,CACtB,UAAU,SAAS,KACjB,KAAK,EAAE,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KACxC,oBAAoB,EACzB,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAU9F"}