reactive-route 0.0.1-alpha.15 → 0.0.1-alpha.17

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.
Files changed (38) hide show
  1. package/dist/adapters/kr-observable-preact.d.ts +3 -0
  2. package/dist/adapters/kr-observable-preact.d.ts.map +1 -0
  3. package/dist/adapters/kr-observable.d.ts.map +1 -1
  4. package/dist/adapters/mobx-preact.d.ts +3 -0
  5. package/dist/adapters/mobx-preact.d.ts.map +1 -0
  6. package/dist/adapters/mobx.d.ts.map +1 -1
  7. package/dist/adapters/solid.d.ts.map +1 -1
  8. package/dist/cjs/adapters/kr-observable/index.js +0 -1
  9. package/dist/cjs/adapters/kr-observable-preact/index.js +39 -0
  10. package/dist/cjs/adapters/kr-observable-preact/package.json +1 -0
  11. package/dist/cjs/adapters/mobx/index.js +1 -2
  12. package/dist/cjs/adapters/mobx-preact/index.js +43 -0
  13. package/dist/cjs/adapters/mobx-preact/package.json +1 -0
  14. package/dist/cjs/adapters/solid/index.js +1 -2
  15. package/dist/cjs/preact/index.js +104 -0
  16. package/dist/cjs/preact/package.json +1 -0
  17. package/dist/cjs/react/index.js +0 -2
  18. package/dist/cjs/solid/index.js +15 -13
  19. package/dist/core/types/InterfaceRouterStore.d.ts +0 -2
  20. package/dist/core/types/InterfaceRouterStore.d.ts.map +1 -1
  21. package/dist/esm/adapters/kr-observable/index.js +0 -1
  22. package/dist/esm/adapters/kr-observable-preact/index.js +18 -0
  23. package/dist/esm/adapters/kr-observable-preact/package.json +1 -0
  24. package/dist/esm/adapters/mobx/index.js +2 -3
  25. package/dist/esm/adapters/mobx-preact/index.js +22 -0
  26. package/dist/esm/adapters/mobx-preact/package.json +1 -0
  27. package/dist/esm/adapters/solid/index.js +1 -2
  28. package/dist/esm/preact/index.js +81 -0
  29. package/dist/esm/preact/package.json +1 -0
  30. package/dist/esm/react/index.js +0 -2
  31. package/dist/esm/solid/index.js +15 -13
  32. package/dist/preact/Router.d.ts +3 -0
  33. package/dist/preact/Router.d.ts.map +1 -0
  34. package/dist/preact/index.d.ts +2 -0
  35. package/dist/preact/index.d.ts.map +1 -0
  36. package/dist/solid/Router.d.ts.map +1 -1
  37. package/dist/tsconfig.types.react.tsbuildinfo +1 -1
  38. package/package.json +22 -2
@@ -0,0 +1,3 @@
1
+ import { TypeAdapters } from 'reactive-route';
2
+ export declare const adapters: TypeAdapters;
3
+ //# sourceMappingURL=kr-observable-preact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kr-observable-preact.d.ts","sourceRoot":"","sources":["../../packages/adapters/kr-observable-preact.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,YAYtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"kr-observable.d.ts","sourceRoot":"","sources":["../../packages/adapters/kr-observable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,YAatB,CAAC"}
1
+ {"version":3,"file":"kr-observable.d.ts","sourceRoot":"","sources":["../../packages/adapters/kr-observable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,YAYtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { TypeAdapters } from 'reactive-route';
2
+ export declare const adapters: TypeAdapters;
3
+ //# sourceMappingURL=mobx-preact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobx-preact.d.ts","sourceRoot":"","sources":["../../packages/adapters/mobx-preact.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,YAetB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mobx.d.ts","sourceRoot":"","sources":["../../packages/adapters/mobx.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,YAgBtB,CAAC"}
1
+ {"version":3,"file":"mobx.d.ts","sourceRoot":"","sources":["../../packages/adapters/mobx.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,YAetB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"solid.d.ts","sourceRoot":"","sources":["../../packages/adapters/solid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAI9C,eAAO,MAAM,QAAQ,EAAE,YAoBtB,CAAC"}
1
+ {"version":3,"file":"solid.d.ts","sourceRoot":"","sources":["../../packages/adapters/solid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAI9C,eAAO,MAAM,QAAQ,EAAE,YAmBtB,CAAC"}
@@ -35,6 +35,5 @@ var adapters = {
35
35
  Object.assign(obj, newObj);
36
36
  },
37
37
  makeObservable: import_kr_observable.makeObservable,
38
- makeAutoObservable: import_kr_observable.makeObservable,
39
38
  observer: import_react.observer
40
39
  };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/adapters/kr-observable-preact.ts
21
+ var kr_observable_preact_exports = {};
22
+ __export(kr_observable_preact_exports, {
23
+ adapters: () => adapters
24
+ });
25
+ module.exports = __toCommonJS(kr_observable_preact_exports);
26
+ var import_kr_observable = require("kr-observable");
27
+ var import_preact = require("kr-observable/preact");
28
+ var adapters = {
29
+ batch: (cb) => cb(),
30
+ autorun: import_kr_observable.autorun,
31
+ replaceObject: (obj, newObj) => {
32
+ for (const variableKey in obj) {
33
+ delete obj[variableKey];
34
+ }
35
+ Object.assign(obj, newObj);
36
+ },
37
+ makeObservable: import_kr_observable.makeObservable,
38
+ observer: import_preact.observer
39
+ };
@@ -0,0 +1 @@
1
+ {"type": "commonjs"}
@@ -39,6 +39,5 @@ var adapters = {
39
39
  Object.assign(obj, newObj);
40
40
  });
41
41
  },
42
- makeObservable: import_mobx.observable,
43
- makeAutoObservable: import_mobx.makeAutoObservable
42
+ makeObservable: import_mobx.observable
44
43
  };
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/adapters/mobx-preact.ts
21
+ var mobx_preact_exports = {};
22
+ __export(mobx_preact_exports, {
23
+ adapters: () => adapters
24
+ });
25
+ module.exports = __toCommonJS(mobx_preact_exports);
26
+ var import_mobx = require("mobx");
27
+ var import_mobx_preact = require("mobx-preact");
28
+ var adapters = {
29
+ batch: import_mobx.runInAction,
30
+ autorun: import_mobx.autorun,
31
+ observer: import_mobx_preact.observer,
32
+ replaceObject: (obj, newObj) => {
33
+ (0, import_mobx.runInAction)(() => {
34
+ for (const variableKey in obj) {
35
+ if (obj.hasOwnProperty(variableKey)) {
36
+ delete obj[variableKey];
37
+ }
38
+ }
39
+ Object.assign(obj, newObj);
40
+ });
41
+ },
42
+ makeObservable: import_mobx.observable
43
+ };
@@ -0,0 +1 @@
1
+ {"type": "commonjs"}
@@ -41,6 +41,5 @@ var adapters = {
41
41
  })
42
42
  );
43
43
  },
44
- makeObservable: import_store.createMutable,
45
- makeAutoObservable: import_store.createMutable
44
+ makeObservable: import_store.createMutable
46
45
  };
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/preact/index.ts
21
+ var preact_exports = {};
22
+ __export(preact_exports, {
23
+ Router: () => Router
24
+ });
25
+ module.exports = __toCommonJS(preact_exports);
26
+
27
+ // packages/preact/Router.tsx
28
+ var import_hooks = require("preact/hooks");
29
+ var import_reactive_route = require("reactive-route");
30
+ var import_jsx_runtime = require("preact/jsx-runtime");
31
+ function RouterInner(props) {
32
+ const disposerRef = (0, import_hooks.useRef)(null);
33
+ const redirectOnHistoryPop = (0, import_hooks.useCallback)(() => {
34
+ if (!import_reactive_route.history) return;
35
+ import_reactive_route.history.listen((params) => {
36
+ if (params.action !== "POP") return;
37
+ const previousRoutePathname = props.routerStore.routesHistory[props.routerStore.routesHistory.length - 2];
38
+ if (previousRoutePathname === params.location.pathname) {
39
+ props.routerStore.adapters.batch(() => props.routerStore.routesHistory.pop());
40
+ }
41
+ void props.routerStore.redirectTo({
42
+ noHistoryPush: true,
43
+ ...(0, import_reactive_route.getInitialRoute)({
44
+ routes: props.routes,
45
+ pathname: import_reactive_route.history.location.pathname
46
+ })
47
+ });
48
+ });
49
+ }, []);
50
+ const [config] = (0, import_hooks.useState)(
51
+ () => props.routerStore.adapters.makeObservable({
52
+ loadedComponentName: void 0,
53
+ loadedComponentPage: void 0,
54
+ currentProps: {}
55
+ })
56
+ );
57
+ const setLoadedComponent = (0, import_hooks.useCallback)(() => {
58
+ const { loadedComponentName, loadedComponentPage } = config;
59
+ const { currentRoute, isRedirecting } = props.routerStore;
60
+ const componentConfig = props.routes[currentRoute.name];
61
+ let preventRedirect = false;
62
+ if (isRedirecting) preventRedirect = true;
63
+ else if (loadedComponentName === currentRoute.name) preventRedirect = true;
64
+ else if (loadedComponentPage != null && currentRoute.name != null) {
65
+ if (loadedComponentPage === currentRoute.pageName) {
66
+ props.routerStore.adapters.batch(() => {
67
+ config.currentProps = "props" in componentConfig ? componentConfig.props || {} : {};
68
+ });
69
+ preventRedirect = true;
70
+ }
71
+ }
72
+ if (preventRedirect) return;
73
+ props.routerStore.adapters.batch(() => {
74
+ if (loadedComponentName) props.beforeUpdatePageComponent?.();
75
+ props.beforeSetPageComponent?.(componentConfig);
76
+ config.currentProps = "props" in componentConfig ? componentConfig.props || {} : {};
77
+ config.loadedComponentName = currentRoute.name;
78
+ config.loadedComponentPage = componentConfig.pageName;
79
+ });
80
+ }, []);
81
+ (0, import_hooks.useState)(() => {
82
+ props.routerStore.adapters.batch(() => {
83
+ props.beforeMount?.();
84
+ redirectOnHistoryPop();
85
+ setLoadedComponent();
86
+ disposerRef.current = props.routerStore.adapters.autorun(setLoadedComponent);
87
+ });
88
+ });
89
+ (0, import_hooks.useEffect)(() => {
90
+ return () => {
91
+ disposerRef.current?.();
92
+ };
93
+ }, []);
94
+ if (!config.loadedComponentName) return null;
95
+ const LoadedComponent = props.routes[config.loadedComponentName]?.component || null;
96
+ if (LoadedComponent) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoadedComponent, { ...config.currentProps });
97
+ return null;
98
+ }
99
+ function Router(props) {
100
+ const [Component] = (0, import_hooks.useState)(
101
+ () => props.routerStore.adapters.observer ? props.routerStore.adapters.observer(RouterInner) : RouterInner
102
+ );
103
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { ...props });
104
+ }
@@ -0,0 +1 @@
1
+ {"type": "commonjs"}
@@ -65,7 +65,6 @@ function RouterInner(props) {
65
65
  if (loadedComponentPage === currentRoute.pageName) {
66
66
  props.routerStore.adapters.batch(() => {
67
67
  config.currentProps = "props" in componentConfig ? componentConfig.props || {} : {};
68
- config[Symbol.for("$adm")]?.batch();
69
68
  });
70
69
  preventRedirect = true;
71
70
  }
@@ -77,7 +76,6 @@ function RouterInner(props) {
77
76
  config.currentProps = "props" in componentConfig ? componentConfig.props || {} : {};
78
77
  config.loadedComponentName = currentRoute.name;
79
78
  config.loadedComponentPage = componentConfig.pageName;
80
- config[Symbol.for("$adm")]?.batch();
81
79
  });
82
80
  }, []);
83
81
  (0, import_react.useState)(() => {
@@ -77,23 +77,25 @@ function Router(props) {
77
77
  props.routerStore.adapters.replaceObject(config.currentProps, "props" in componentConfig ? componentConfig.props : {});
78
78
  config.loadedComponentName = currentRouteName;
79
79
  config.loadedComponentPage = componentConfig.pageName;
80
- config[Symbol.for("$adm")]?.batch();
81
80
  });
82
81
  });
83
82
  }
84
83
  props.beforeMount?.();
85
84
  redirectOnHistoryPop();
86
85
  props.routerStore.adapters.autorun(() => setLoadedComponent());
87
- return (0, import_web.createComponent)(import_solid_js.Show, {
88
- get when() {
89
- return config.loadedComponentName;
90
- },
91
- get children() {
92
- return (0, import_web.createComponent)(import_web3.Dynamic, (0, import_web2.mergeProps)({
93
- get component() {
94
- return props.routes[config.loadedComponentName]?.component || void 0;
95
- }
96
- }, () => config.currentProps));
97
- }
98
- });
86
+ return (
87
+ // @ts-ignore
88
+ (0, import_web.createComponent)(import_solid_js.Show, {
89
+ get when() {
90
+ return config.loadedComponentName;
91
+ },
92
+ get children() {
93
+ return (0, import_web.createComponent)(import_web3.Dynamic, (0, import_web2.mergeProps)({
94
+ get component() {
95
+ return props.routes[config.loadedComponentName]?.component || void 0;
96
+ }
97
+ }, () => config.currentProps));
98
+ }
99
+ })
100
+ );
99
101
  }
@@ -6,9 +6,7 @@ export type TypeAdapters = {
6
6
  autorun: (cb: () => void) => any;
7
7
  replaceObject: <TObj extends Record<string, any>>(obj: TObj, newObj: TObj) => void;
8
8
  makeObservable: <TObj extends Record<string, any>>(obj: TObj) => TObj;
9
- makeAutoObservable: (...args: Array<any>) => any;
10
9
  observer?: (comp: any) => any;
11
- subscribe?: (target: any, cb: () => void, keys: Set<any>) => any;
12
10
  };
13
11
  export type TypeCreateRouterStore<TRoutes extends Record<string | 'notFound' | 'internalError', TypeRoute>> = {
14
12
  routes: TRoutes;
@@ -1 +1 @@
1
- {"version":3,"file":"InterfaceRouterStore.d.ts","sourceRoot":"","sources":["../../../packages/core/types/InterfaceRouterStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,GAAG,CAAC;IACjC,aAAa,EAAE,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC;IACnF,cAAc,EAAE,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;IACtE,kBAAkB,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC;IAC9B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC;CAClE,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAC/B,OAAO,SAAS,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG,eAAe,EAAE,SAAS,CAAC,IACtE;IACF,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAC9B,OAAO,SAAS,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG,eAAe,EAAE,SAAS,CAAC,IACtE;IACF,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC;IACvD,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,EACzC,MAAM,EAAE,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,GAChD,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,cAAc,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,iBAAiB,CAAC,GAAG,EAAE,oBAAoB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE,CAAC"}
1
+ {"version":3,"file":"InterfaceRouterStore.d.ts","sourceRoot":"","sources":["../../../packages/core/types/InterfaceRouterStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,GAAG,CAAC;IACjC,aAAa,EAAE,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC;IACnF,cAAc,EAAE,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;IACtE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAC/B,OAAO,SAAS,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG,eAAe,EAAE,SAAS,CAAC,IACtE;IACF,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAC9B,OAAO,SAAS,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG,eAAe,EAAE,SAAS,CAAC,IACtE;IACF,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC;IACvD,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,EACzC,MAAM,EAAE,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,GAChD,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,cAAc,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,iBAAiB,CAAC,GAAG,EAAE,oBAAoB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE,CAAC"}
@@ -11,7 +11,6 @@ var adapters = {
11
11
  Object.assign(obj, newObj);
12
12
  },
13
13
  makeObservable,
14
- makeAutoObservable: makeObservable,
15
14
  observer
16
15
  };
17
16
  export {
@@ -0,0 +1,18 @@
1
+ // packages/adapters/kr-observable-preact.ts
2
+ import { autorun, makeObservable } from "kr-observable";
3
+ import { observer } from "kr-observable/preact";
4
+ var adapters = {
5
+ batch: (cb) => cb(),
6
+ autorun,
7
+ replaceObject: (obj, newObj) => {
8
+ for (const variableKey in obj) {
9
+ delete obj[variableKey];
10
+ }
11
+ Object.assign(obj, newObj);
12
+ },
13
+ makeObservable,
14
+ observer
15
+ };
16
+ export {
17
+ adapters
18
+ };
@@ -0,0 +1 @@
1
+ {"type": "module"}
@@ -1,5 +1,5 @@
1
1
  // packages/adapters/mobx.ts
2
- import { autorun, makeAutoObservable, observable, runInAction } from "mobx";
2
+ import { autorun, observable, runInAction } from "mobx";
3
3
  import { observer } from "mobx-react-lite";
4
4
  var adapters = {
5
5
  batch: runInAction,
@@ -15,8 +15,7 @@ var adapters = {
15
15
  Object.assign(obj, newObj);
16
16
  });
17
17
  },
18
- makeObservable: observable,
19
- makeAutoObservable
18
+ makeObservable: observable
20
19
  };
21
20
  export {
22
21
  adapters
@@ -0,0 +1,22 @@
1
+ // packages/adapters/mobx-preact.ts
2
+ import { autorun, observable, runInAction } from "mobx";
3
+ import { observer } from "mobx-preact";
4
+ var adapters = {
5
+ batch: runInAction,
6
+ autorun,
7
+ observer,
8
+ replaceObject: (obj, newObj) => {
9
+ runInAction(() => {
10
+ for (const variableKey in obj) {
11
+ if (obj.hasOwnProperty(variableKey)) {
12
+ delete obj[variableKey];
13
+ }
14
+ }
15
+ Object.assign(obj, newObj);
16
+ });
17
+ },
18
+ makeObservable: observable
19
+ };
20
+ export {
21
+ adapters
22
+ };
@@ -0,0 +1 @@
1
+ {"type": "module"}
@@ -17,8 +17,7 @@ var adapters = {
17
17
  })
18
18
  );
19
19
  },
20
- makeObservable: createMutable,
21
- makeAutoObservable: createMutable
20
+ makeObservable: createMutable
22
21
  };
23
22
  export {
24
23
  adapters
@@ -0,0 +1,81 @@
1
+ // packages/preact/Router.tsx
2
+ import { useCallback, useEffect, useRef, useState } from "preact/hooks";
3
+ import { getInitialRoute, history } from "reactive-route";
4
+ import { jsx } from "preact/jsx-runtime";
5
+ function RouterInner(props) {
6
+ const disposerRef = useRef(null);
7
+ const redirectOnHistoryPop = useCallback(() => {
8
+ if (!history) return;
9
+ history.listen((params) => {
10
+ if (params.action !== "POP") return;
11
+ const previousRoutePathname = props.routerStore.routesHistory[props.routerStore.routesHistory.length - 2];
12
+ if (previousRoutePathname === params.location.pathname) {
13
+ props.routerStore.adapters.batch(() => props.routerStore.routesHistory.pop());
14
+ }
15
+ void props.routerStore.redirectTo({
16
+ noHistoryPush: true,
17
+ ...getInitialRoute({
18
+ routes: props.routes,
19
+ pathname: history.location.pathname
20
+ })
21
+ });
22
+ });
23
+ }, []);
24
+ const [config] = useState(
25
+ () => props.routerStore.adapters.makeObservable({
26
+ loadedComponentName: void 0,
27
+ loadedComponentPage: void 0,
28
+ currentProps: {}
29
+ })
30
+ );
31
+ const setLoadedComponent = useCallback(() => {
32
+ const { loadedComponentName, loadedComponentPage } = config;
33
+ const { currentRoute, isRedirecting } = props.routerStore;
34
+ const componentConfig = props.routes[currentRoute.name];
35
+ let preventRedirect = false;
36
+ if (isRedirecting) preventRedirect = true;
37
+ else if (loadedComponentName === currentRoute.name) preventRedirect = true;
38
+ else if (loadedComponentPage != null && currentRoute.name != null) {
39
+ if (loadedComponentPage === currentRoute.pageName) {
40
+ props.routerStore.adapters.batch(() => {
41
+ config.currentProps = "props" in componentConfig ? componentConfig.props || {} : {};
42
+ });
43
+ preventRedirect = true;
44
+ }
45
+ }
46
+ if (preventRedirect) return;
47
+ props.routerStore.adapters.batch(() => {
48
+ if (loadedComponentName) props.beforeUpdatePageComponent?.();
49
+ props.beforeSetPageComponent?.(componentConfig);
50
+ config.currentProps = "props" in componentConfig ? componentConfig.props || {} : {};
51
+ config.loadedComponentName = currentRoute.name;
52
+ config.loadedComponentPage = componentConfig.pageName;
53
+ });
54
+ }, []);
55
+ useState(() => {
56
+ props.routerStore.adapters.batch(() => {
57
+ props.beforeMount?.();
58
+ redirectOnHistoryPop();
59
+ setLoadedComponent();
60
+ disposerRef.current = props.routerStore.adapters.autorun(setLoadedComponent);
61
+ });
62
+ });
63
+ useEffect(() => {
64
+ return () => {
65
+ disposerRef.current?.();
66
+ };
67
+ }, []);
68
+ if (!config.loadedComponentName) return null;
69
+ const LoadedComponent = props.routes[config.loadedComponentName]?.component || null;
70
+ if (LoadedComponent) return /* @__PURE__ */ jsx(LoadedComponent, { ...config.currentProps });
71
+ return null;
72
+ }
73
+ function Router(props) {
74
+ const [Component] = useState(
75
+ () => props.routerStore.adapters.observer ? props.routerStore.adapters.observer(RouterInner) : RouterInner
76
+ );
77
+ return /* @__PURE__ */ jsx(Component, { ...props });
78
+ }
79
+ export {
80
+ Router
81
+ };
@@ -0,0 +1 @@
1
+ {"type": "module"}
@@ -39,7 +39,6 @@ function RouterInner(props) {
39
39
  if (loadedComponentPage === currentRoute.pageName) {
40
40
  props.routerStore.adapters.batch(() => {
41
41
  config.currentProps = "props" in componentConfig ? componentConfig.props || {} : {};
42
- config[Symbol.for("$adm")]?.batch();
43
42
  });
44
43
  preventRedirect = true;
45
44
  }
@@ -51,7 +50,6 @@ function RouterInner(props) {
51
50
  config.currentProps = "props" in componentConfig ? componentConfig.props || {} : {};
52
51
  config.loadedComponentName = currentRoute.name;
53
52
  config.loadedComponentPage = componentConfig.pageName;
54
- config[Symbol.for("$adm")]?.batch();
55
53
  });
56
54
  }, []);
57
55
  useState(() => {
@@ -51,25 +51,27 @@ function Router(props) {
51
51
  props.routerStore.adapters.replaceObject(config.currentProps, "props" in componentConfig ? componentConfig.props : {});
52
52
  config.loadedComponentName = currentRouteName;
53
53
  config.loadedComponentPage = componentConfig.pageName;
54
- config[Symbol.for("$adm")]?.batch();
55
54
  });
56
55
  });
57
56
  }
58
57
  props.beforeMount?.();
59
58
  redirectOnHistoryPop();
60
59
  props.routerStore.adapters.autorun(() => setLoadedComponent());
61
- return _$createComponent(Show, {
62
- get when() {
63
- return config.loadedComponentName;
64
- },
65
- get children() {
66
- return _$createComponent(Dynamic, _$mergeProps({
67
- get component() {
68
- return props.routes[config.loadedComponentName]?.component || void 0;
69
- }
70
- }, () => config.currentProps));
71
- }
72
- });
60
+ return (
61
+ // @ts-ignore
62
+ _$createComponent(Show, {
63
+ get when() {
64
+ return config.loadedComponentName;
65
+ },
66
+ get children() {
67
+ return _$createComponent(Dynamic, _$mergeProps({
68
+ get component() {
69
+ return props.routes[config.loadedComponentName]?.component || void 0;
70
+ }
71
+ }, () => config.currentProps));
72
+ }
73
+ })
74
+ );
73
75
  }
74
76
  export {
75
77
  Router
@@ -0,0 +1,3 @@
1
+ import { TypePropsRouter, TypeRoute } from 'reactive-route';
2
+ export declare function Router<TRoutes extends Record<string, TypeRoute>>(props: TypePropsRouter<TRoutes>): any;
3
+ //# sourceMappingURL=Router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../packages/preact/Router.tsx"],"names":[],"mappings":"AACA,OAAO,EAA4B,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAkGtF,wBAAgB,MAAM,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAO1D,GAAG,CACzC"}
@@ -0,0 +1,2 @@
1
+ export { Router } from './Router';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/preact/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,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;AAItF,wBAAgB,MAAM,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,kCA0FhG"}
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,kCA4FhG"}
@@ -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"],"version":"5.9.2"}
1
+ {"root":["../packages/adapters/kr-observable-preact.ts","../packages/adapters/kr-observable.ts","../packages/adapters/mobx-preact.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/preact/Router.tsx","../packages/preact/index.ts","../packages/react/Router.tsx","../packages/react/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.15",
5
+ "version": "0.0.1-alpha.17",
6
6
  "description": "Reactive Router for different frameworks",
7
7
  "repository": {
8
8
  "type": "git",
@@ -40,20 +40,25 @@
40
40
  "@espcom/esbuild-plugin-replace": "1.3.0",
41
41
  "@solidjs/testing-library": "0.8.10",
42
42
  "@testing-library/react": "16.3.0",
43
+ "@testing-library/preact": "3.2.4",
43
44
  "@types/lodash": "4.17.16",
44
45
  "@types/node": "22.14.1",
45
46
  "@vitest/coverage-istanbul": "3.2.4",
47
+ "@preact/preset-vite": "2.10.2",
46
48
  "babel-preset-solid": "1.9.9",
47
49
  "badge-maker": "5.0.2",
48
50
  "esbuild": "0.25.9",
49
51
  "global-jsdom": "26.0.0",
50
52
  "husky": "9.1.7",
51
- "kr-observable": "3.0.23",
53
+ "kr-observable": "3.1.1",
52
54
  "lint-staged": "16.1.6",
53
55
  "lodash": "4.17.21",
54
56
  "mobx": "6.13.7",
57
+ "mobx-preact": "3.0.0",
55
58
  "mobx-react-lite": "4.1.0",
56
59
  "react": "19.1.1",
60
+ "preact": "10.27.2",
61
+ "preact-render-to-string": "6.6.1",
57
62
  "regenerator-runtime": "0.14.1",
58
63
  "solid-js": "1.9.9",
59
64
  "tsx": "4.20.5",
@@ -76,6 +81,11 @@
76
81
  "require": "./dist/cjs/react/index.js",
77
82
  "import": "./dist/esm/react/index.js"
78
83
  },
84
+ "./preact": {
85
+ "types": "./dist/preact/index.d.ts",
86
+ "require": "./dist/cjs/preact/index.js",
87
+ "import": "./dist/esm/preact/index.js"
88
+ },
79
89
  "./solid": {
80
90
  "types": "./dist/solid/index.d.ts",
81
91
  "require": "./dist/cjs/solid/index.js",
@@ -86,6 +96,11 @@
86
96
  "require": "./dist/cjs/adapters/mobx/index.js",
87
97
  "import": "./dist/esm/adapters/mobx/index.js"
88
98
  },
99
+ "./adapters/mobx-preact": {
100
+ "types": "./dist/adapters/mobx-preact.d.ts",
101
+ "require": "./dist/cjs/adapters/mobx-preact/index.js",
102
+ "import": "./dist/esm/adapters/mobx-preact/index.js"
103
+ },
89
104
  "./adapters/solid": {
90
105
  "types": "./dist/adapters/solid.d.ts",
91
106
  "require": "./dist/cjs/adapters/solid/index.js",
@@ -95,6 +110,11 @@
95
110
  "types": "./dist/adapters/kr-observable.d.ts",
96
111
  "require": "./dist/cjs/adapters/kr-observable/index.js",
97
112
  "import": "./dist/esm/adapters/kr-observable/index.js"
113
+ },
114
+ "./adapters/kr-observable-preact": {
115
+ "types": "./dist/adapters/kr-observable-preact.d.ts",
116
+ "require": "./dist/cjs/adapters/kr-observable-preact/index.js",
117
+ "import": "./dist/esm/adapters/kr-observable-preact/index.js"
98
118
  }
99
119
  },
100
120
  "main": "dist/cjs/index.js",