@argon-router/core 0.11.0 → 0.12.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/index.cjs +1 -1
- package/dist/index.d.ts +127 -42
- package/dist/index.js +415 -395
- package/package.json +5 -4
- package/LICENSE.MD +0 -21
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("effector"),a=require("query-string"),n=require("patronum");function t(e,a){for(const n of e)if(a.includes(n))return!0;return!1}function r(a){let{$query:n,navigate:t}=a;return o({$activeRoutes:e.createStore([],{name:"$activeRoutes",sid:"ni3bf8"}),$query:n,navigate:t})}function o(a){let{$activeRoutes:n,$query:r,navigate:o}=a;return a=>{const{parameters:s,forRoutes:i}=a,c=e.createStore(!1,{name:"$entered",sid:"-i5493b"}),d=e.createEvent({name:"entered",sid:"9i8bun"}),l=e.createEvent({name:"exited",sid:"-p2hcsy"}),p=e.createEvent({name:"enter",sid:"30cmky"}),u=e.createEvent({name:"exit",sid:"-2657ec"}),m=e.createEvent({name:"changeEntered",sid:"-5jm7r1"});return e.sample({and:[{clock:m,target:c}],or:{sid:"-j6nk9y"}}),e.sample({and:[{source:{activeRoutes:n,query:r},filter:e=>{let{activeRoutes:a,query:n}=e;return(!i||t(i,a))&&s.safeParse(n).success},fn:e=>{let{query:a}=e;return s.safeParse(a).data},target:[d,m.prepend(()=>!0)]}],or:{sid:"-iscwuk"}}),e.sample({and:[{source:{activeRoutes:n,query:r,entered:c},filter:e=>{let{activeRoutes:a,query:n,entered:r}=e;return r&&!((!i||t(i,a))&&s.safeParse(n).success)},target:[l.prepend(()=>{}),m.prepend(()=>!1)]}],or:{sid:"-ibv31q"}}),e.sample({and:[{clock:p,source:r,fn:(e,a)=>({query:{...e,...a}}),target:o}],or:{sid:"-hsmaa3"}}),e.sample({and:[{clock:u,source:r,fn:(e,a)=>{if(a&&a.ignoreParams){const n={};for(const t of a.ignoreParams)e[t]&&(n[t]=e[t]);return{query:n}}return{query:{}}},target:o}],or:{sid:"-whgzm0"}}),{enter:p,entered:d,exited:l,exit:u}}}function s(e){return a=>{const n=a.split("/").map(e=>e.trim()).filter(e=>""!==e);let t=null;function r(e,a){t||(t={}),t[e]=a}if(0===e.length)return 0===n.length?{path:a,params:null}:null;for(let o=0;o<e.length;o++){const a=e[o];switch(a.type){case"const":if(a.name!==n.shift())return null;continue;case"parameter":{const{arrayProps:t,genericProps:s,required:i}=a.payload;if(t){const i=[];let c;for(;c=n.shift(),c;){switch(null==s?void 0:s.type){case"number":if(isNaN(+c))return null;i.push(+c);break;case"union":if(!s.items.includes(c))return null;i.push(c);break;default:i.push(c)}if(i.length>=(t.max??1/0))break}if(i.length<(t.min??0))return null;if(n.length>0&&!e[o+1])return null;r(a.name,i);break}const c=n.shift();if(i&&!c)return null;if(!c){r(a.name,void 0);continue}switch(null==s?void 0:s.type){case"number":if(isNaN(+c))return null;r(a.name,+c);break;case"union":if(!s.items.includes(c))return null;r(a.name,c);break;default:r(a.name,c)}}}}return n.length>0?null:{path:a,params:t}}}function i(e){if(!e)return null;const a=e[1];let n,t,r;for(const o of e.slice(2))o&&(o.includes("<")?n=o.replaceAll(/\s/g,"").replace("<","").replace(">",""):(o.includes("{")&&(t=o.replace("{","").replace("}","").split(",").map(e=>parseInt(e))),["*","?","+"].includes(o)&&(r=o)));return{name:a,genericProps:n,arrayProps:t,modificator:r}}function c(e){return a=>{const n=[];if(0===e.length)return"/";for(const t of e)switch(t.type){case"const":n.push(t.name);break;case"parameter":if(!a[t.name])continue;if(Array.isArray(a[t.name]))for(const e of a[t.name])n.push(e.toString());else n.push(a[t.name].toString())}return`/${n.join("/")}`}}function d(){const n=e.createStore(null,{and:{serialize:"ignore"},name:"$history",sid:"-ld7lzl"}),t=e.createStore({query:{},path:null},{name:"$locationState",sid:"-4u3w85"}),o=t.map(e=>e.query),s=t.map(e=>e.path),i=e.createEvent({name:"setHistory",sid:"-ormmkk"}),c=e.createEvent({name:"navigate",sid:"tawqep"}),d=e.createEvent({name:"back",sid:"bxy8rt"}),l=e.createEvent({name:"forward",sid:"-bpmzb1"}),p=e.createEvent({name:"locationUpdated",sid:"lkzldx"}),u=e.attach({and:{source:n,effect:(e,n)=>{let{path:t,query:r,replace:o}=n;if(!e)throw new Error("history not found");const s={pathname:t,search:`?${a.stringify(r)}`};o?e.replace(s):e.push(s)}},or:{name:"navigateFx",sid:"-ov1xn7"}}),m=e.createEffect(n=>{const t=e.scopeBind(p);if(t({pathname:n.location.pathname,query:{...a.parse(n.location.search)}}),!n)throw new Error;n.listen(e=>{let{location:n}=e;t({pathname:n.pathname,query:{...a.parse(n.search)}})})},{name:"subscribeHistoryFx",sid:"-m60vds"});return e.sample({and:[{clock:i,target:n}],or:{sid:"ii4q"}}),e.sample({and:[{clock:n,filter:Boolean,target:m}],or:{sid:"39h3j"}}),e.sample({and:[{clock:p,fn:e=>({path:e.pathname,query:e.query}),target:t}],or:{sid:"i3x4a"}}),e.sample({and:[{clock:c,source:s,fn:(e,a)=>({path:e,...a}),target:u}],or:{sid:"ylqx4"}}),{$history:n,$locationState:t,$query:o,$path:s,setHistory:i,navigate:c,back:d,forward:l,locationUpdated:p,trackQuery:r({$query:o,navigate:c})}}function l(){let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{beforeOpen:n,$isPending:t=e.createStore(!1,{name:"$isPending",sid:"-f18bwu"}),transformer:r=e=>e??null}=a,o=e.createStore(null,{name:"$params",sid:"v2ropa"}),s=e.createStore(!1,{name:"$isOpened",sid:"mzzqqr"}),i=e.createEvent({name:"open",sid:"f33vnd"}),c=e.createEvent({name:"opened",sid:"-efpvez"}),d=e.createEvent({name:"openedOnServer",sid:"o8st20"}),l=e.createEvent({name:"openedOnClient",sid:"xaagqn"}),p=e.createEvent({name:"close",sid:"-20upkw"}),u=e.createEvent({name:"closed",sid:"avevxu"}),m=e.createEvent({name:"cancelled",sid:"808tq5"});return e.sample({and:[{clock:i,target:[c]}],or:{sid:"p3r2ad"}}),e.sample({and:[{clock:i,fn:r,target:o}],or:{sid:"p6i196"}}),e.split({and:[{source:c,match:()=>"undefined"==typeof window?"server":"client",cases:{server:d,client:l}}],or:{sid:"plch9x"}}),e.sample({and:[{clock:p,target:u}],or:{sid:"q1ub2r"}}),e.sample({and:[{clock:[c.map(()=>!0),u.map(()=>!1)],target:s}],or:{sid:"q4la1k"}}),{$params:o,$isOpened:s,$isPending:t,open:i,opened:c,openedOnClient:l,openedOnServer:d,close:p,closed:u,cancelled:m,path:"",beforeOpen:n,"@@unitShape":()=>({params:o,isOpened:s,isPending:t,onOpen:i,onClose:p})}}exports.chainRoute=function(a){const{route:n,beforeOpen:t,openOn:r,cancelOn:o}=a;let s;const i=e.createEffect(()=>null==s?void 0:s(),{name:"waitForAsyncBundleFx",sid:"qdkcuo"}),c=e.createEffect(async e=>{await i();for(const a of[].concat(t))await a(e)},{name:"openFx",sid:"-fwntqy"}),d=e=>e&&"params"in e?e.params:null,p=l({transformer:d});return e.sample({and:[{clock:n.opened,target:c}],or:{sid:"-s9xf6p"}}),e.sample({and:[{clock:n.opened,fn:d,target:p.$params}],or:{sid:"-1u78yc"}}),r&&e.sample({and:[{clock:r,source:p.$params,fn:e=>e,target:p.open}],or:{sid:"-1qcor3"}}),o&&(e.sample({and:[{clock:[n.closed].concat(o),target:p.close}],or:{sid:"-19uuy9"}}),e.sample({and:[{clock:[].concat(o),target:p.cancelled}],or:{sid:"-vk7iv"}})),Object.assign(p,{internal:{setAsyncImport:e=>s=e}})},exports.createRoute=function(a){let n;const t=e.createEffect(async e=>{await f(),await y();const n=a.parent;return n&&await n.internal.openFx({...e??{params:{}},navigate:!1}),e},{name:"openFx",sid:"awhgwd"}),r=e.createStore({},{name:"$params",sid:"-oahffx"}),o=e.createStore(!1,{name:"$isOpened",sid:"-6l68oe"}),s=t.pending,i=e.createEvent({name:"open",sid:"gjsrgc"}),c=e.createEvent({name:"close",sid:"-yagmc8"}),d=e.createEvent({name:"opened",sid:"x0iwhi"}),l=e.createEvent({name:"openedOnServer",sid:"346r3u"}),p=e.createEvent({name:"openedOnClient",sid:"31q95t"}),u=e.createEvent({name:"navigated",sid:"-t30l0x"}),m=e.createEvent({name:"closed",sid:"uue4ce"}),f=e.createEffect(()=>null==n?void 0:n(),{name:"waitForAsyncBundleFx",sid:"-nml5ho"}),y=e.createEffect(async()=>{for(const e of a.beforeOpen??[])await e()},{name:"beforeOpenFx",sid:"-vqlnbm"}),h=e.attach({and:{effect:t},or:{name:"navigatedFx",sid:"a4yadj"}}),g={};return e.sample({and:[{clock:i,target:t}],or:{sid:"ynxuww"}}),e.sample({and:[{clock:u,fn:e=>({navigate:!1,...e}),target:h}],or:{sid:"z28ica"}}),e.sample({and:[{clock:h.doneData,fn:e=>e&&"params"in e?{...e.params}:g,target:r}],or:{sid:"z5j9wg"}}),e.sample({and:[{clock:h.failData,fn:()=>g,target:r}],or:{sid:"-z1vw16"}}),e.split({and:[{source:h.doneData,match:()=>"undefined"==typeof window?"server":"client",cases:{server:l,client:p}}],or:{sid:"-yyl4h0"}}),e.sample({and:[{clock:[p,l],target:d}],or:{sid:"-yhji2t"}}),e.sample({and:[{clock:c,target:m}],or:{sid:"-y38unf"}}),e.sample({and:[{clock:[d.map(()=>!0),m.map(()=>!1)],target:o}],or:{sid:"-y0hvom"}}),{$params:r,$isOpened:o,$isPending:s,open:i,closed:m,opened:d,openedOnClient:p,openedOnServer:l,...a,internal:{navigated:u,close:c,openFx:t,setAsyncImport:e=>n=e},"@@unitShape":()=>({params:r,isPending:s,isOpened:o,onOpen:i})}},exports.createRouter=function(a){const{base:n="/",routes:t}=a,{$path:r,$query:l,back:p,forward:u,navigate:m,setHistory:f,locationUpdated:y}=d(),h=t.map(e=>{let a=e;const t=[];for(t.unshift(a.path);a.parent;)a=a.parent,"/"!==a.path&&t.unshift(a.path);const r="/"===n?t.join(""):[n,...t].join(""),{build:o,parse:d}=function(e){const a=[],n=/:(\w+)(<[\s?\w|]+>)?({\d+\,\d+})?([+*?])?/,t=e.split("/").filter(Boolean);for(let r=0;r<t.length;r++){const o=t[r];if(!o)continue;const s=i(o.match(n));if(!s){a.push({type:"const",name:o,payload:void 0});continue}const{arrayProps:c,genericProps:d,modificator:l,name:p}=s;if(!p)throw new Error(`Invalid path: "${e}". Name for argument must be provided`);const u={type:"parameter",name:p,payload:{required:!0}};switch(d&&"number"===d&&(u.payload.genericProps={type:"number"}),d&&d.includes("|")&&(u.payload.genericProps={type:"union",items:d.split("|")}),l){case"*":u.payload.arrayProps={};break;case"+":u.payload.arrayProps={min:1};break;case"?":u.payload.required=!1}c&&(u.payload.arrayProps={...u.payload.arrayProps,min:c[0],max:c[1]}),a.push(u)}return{parse:s(a),build:c(a)}}(r);return{route:e,path:r,build:o,parse:d}}),g=r.map(e=>{const a=[];if(!e)return a;for(const{route:n,parse:t}of h)t(e)&&a.push(n);return a}),v=e.attach({and:{source:{query:l,path:r},effect:async a=>{let{query:n,path:t}=a;for(const{route:r,parse:o}of h){const a=o(t),[s,i]=[e.scopeBind(r.internal.close),e.scopeBind(r.internal.navigated)];a?i({query:n,params:a.params}):s()}}},or:{name:"openRoutesByPathFx",sid:"-3zl7vq"}});for(const{route:o,build:s}of h)e.sample({and:[{clock:o.internal.openFx.doneData,filter:e=>!1!==(null==e?void 0:e.navigate),fn:e=>({path:s(e&&"params"in e?e.params:void 0),query:(null==e?void 0:e.query)??{},replace:null==e?void 0:e.replace}),target:m}],or:{sid:"exzzqg"}});return e.sample({and:[{clock:y,fn:e=>({path:e.pathname,query:e.query}),target:v}],or:{sid:"ficdn3"}}),{$query:l,$path:r,$activeRoutes:g,back:p,forward:u,navigate:m,routes:t,setHistory:f,mappedRoutes:h,trackQuery:o({$activeRoutes:g,$query:l,navigate:m}),"@@unitShape":()=>({query:l,path:r,activeRoutes:g,onBack:p,onForward:u,onNavigate:m})}},exports.createRouterControls=d,exports.createVirtualRoute=l,exports.group=function(a){const t=l({$isPending:e.withFactory({sid:"-u1putn",fn:()=>n.or(...a.map(e=>e.$isPending)),name:"$isPending",method:"or"})});return e.sample({and:[{clock:a.map(e=>e.$isOpened),filter:e.withFactory({sid:"76kf3k",fn:()=>n.or(...a.map(e=>e.$isOpened)),name:"filter",method:"or"}),fn:()=>{},target:t.open}],or:{sid:"-xmoke0"}}),e.sample({and:[{clock:a.map(e=>e.$isOpened),filter:e.withFactory({sid:"ahvrux",fn:()=>n.not(e.withFactory({sid:"xs5yb9",fn:()=>n.or(...a.map(e=>e.$isOpened)),name:"fn",method:"or"})),name:"filter",method:"not"}),fn:()=>{},target:t.close}],or:{sid:"-x7abrw"}}),t};
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("effector"),t=require("effector-action"),a=require("@argon-router/paths"),n=require("query-string"),r=require("patronum");function o(e,t){for(const a of e)if(t.includes(a))return!0;return!1}function s(t){let{$query:a,navigate:n}=t;return c({$activeRoutes:e.createStore([],{name:"$activeRoutes",sid:"og6k7m"}),$query:a,navigate:n})}function c(t){let{$activeRoutes:a,$query:n,navigate:r}=t;return t=>{const{parameters:s,forRoutes:c}=t,i=e.createStore(!1,{name:"$entered",sid:"-792y0u"}),p=e.createEvent({name:"entered",sid:"agbkn1"}),d=e.createEvent({name:"exited",sid:"-o4e40k"}),u=e.createEvent({name:"enter",sid:"3yfvdc"}),l=e.createEvent({name:"exit",sid:"-181yly"}),m=e.createEvent({name:"changeEntered",sid:"-4liyyn"});return e.sample({and:[{clock:m,target:i}],or:{sid:"-iu0amn"}}),e.sample({and:[{source:{activeRoutes:a,query:n},filter:e=>{let{activeRoutes:t,query:a}=e;return(!c||o(c,t))&&s.safeParse(a).success},fn:e=>{let{query:t}=e;return s.safeParse(t).data},target:[p,m.prepend(()=>!0)]}],or:{sid:"-ir9bnu"}}),e.sample({and:[{source:{activeRoutes:a,query:n,entered:i},filter:e=>{let{activeRoutes:t,query:a,entered:n}=e;return n&&!((!c||o(c,t))&&s.safeParse(a).success)},target:[d.prepend(()=>{}),m.prepend(()=>!1)]}],or:{sid:"-iarhv0"}}),e.sample({and:[{clock:u,source:n,fn:(e,t)=>({query:{...e,...t}}),target:r}],or:{sid:"-hqywi0"}}),e.sample({and:[{clock:l,source:n,fn:(e,t)=>{if(t&&t.ignoreParams){const a={};for(const n of t.ignoreParams)e[n]&&(a[n]=e[n]);return{query:a}}return{query:{}}},target:r}],or:{sid:"-wf9t8k"}}),{enter:u,entered:p,exited:d,exit:l}}}function i(){const a=e.createStore(null,{and:{serialize:"ignore"},name:"$history",sid:"-kw5zle"}),r=e.createStore({query:{},path:null},{name:"$locationState",sid:"-2xxend"}),o=e.createStore(null,{name:"$subscription",sid:"27a2zr"}),c=r.map(e=>e.query),i=r.map(e=>e.path),p=e.createEvent({name:"setHistory",sid:"-lxcw7e"}),d=e.createEvent({name:"navigate",sid:"w56grv"}),u=e.createEvent({name:"back",sid:"es7z4z"}),l=e.createEvent({name:"forward",sid:"12ktc8"}),m=e.createEvent({name:"locationUpdated",sid:"yd7e16"}),f=e.attach({and:{source:a,effect:(e,t)=>{let{path:a,query:r,replace:o}=t;if(!e)throw new Error("history not found");const s={pathname:a,search:`?${n.stringify(r)}`};o?e.replace(s):e.push(s)}},or:{name:"navigateFx",sid:"-m0s7a1"}}),h=t.createAsyncAction({target:{locationUpdated:m,$subscription:o},source:{$subscription:o},fn:async(e,t,a)=>{if(!a)throw Error("Cannot initialize router controls with empty history adapter. Please provide some provider or check your code for passing of nullable value");const r=await t();r.subscription&&r.subscription.unsubscribe(),e.locationUpdated({pathname:a.location.pathname,query:{...n.parse(a.location.search)}}),e.$subscription(a.listen(t=>{e.locationUpdated({pathname:t.pathname,query:{...n.parse(t.search)}})}))}}),g=e.attach({and:{source:a,effect:e=>{if(!e)throw new Error("history not found");e.goBack()}},or:{name:"goBackFx",sid:"k3gxue"}}),y=e.attach({and:{source:a,effect:e=>{if(!e)throw new Error("history not found");e.goForward()}},or:{name:"goForwardFx",sid:"1m1c40"}});return e.sample({and:[{clock:p,target:a}],or:{sid:"1ycdhl"}}),e.sample({and:[{clock:a,filter:Boolean,target:h}],or:{sid:"213cge"}}),e.sample({and:[{clock:m,fn:e=>({path:e.pathname,query:e.query}),target:r}],or:{sid:"2fxsh5"}}),e.sample({and:[{clock:d,source:i,fn:(e,t)=>({path:e,...t}),target:f}],or:{sid:"2wfm9z"}}),e.sample({and:[{clock:u,target:g}],or:{sid:"3btuw3"}}),e.sample({and:[{clock:l,target:y}],or:{sid:"3ektuw"}}),{$history:a,$locationState:r,$query:c,$path:i,setHistory:p,navigate:d,back:u,forward:l,locationUpdated:m,trackQuery:s({$query:c,navigate:d})}}const p={route:e=>p.pathRoute(e)||p.pathlessRoute(e),pathRoute:e=>"object"==typeof e&&null!==e&&"@@type"in e&&"path-route"===e["@@type"],pathlessRoute:e=>"object"==typeof e&&null!==e&&"@@type"in e&&"pathless-route"===e["@@type"],router:e=>"object"==typeof e&&null!==e&&"@@type"in e&&"router"===e["@@type"]},d={pathlessRoute:e=>"route"in e,pathRoute(e){return!this.pathlessRoute(e)&&!this.router(e)},router:e=>p.router(e)};function u(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{beforeOpen:a,$isPending:n=e.createStore(!1,{name:"$isPending",sid:"-f18bwu"}),transformer:r=e=>e??null}=t,o=e.createStore(null,{name:"$params",sid:"v2ropa"}),s=e.createStore(!1,{name:"$isOpened",sid:"mzzqqr"}),c=e.createEvent({name:"open",sid:"f33vnd"}),i=e.createEvent({name:"opened",sid:"-efpvez"}),p=e.createEvent({name:"openedOnServer",sid:"o8st20"}),d=e.createEvent({name:"openedOnClient",sid:"xaagqn"}),u=e.createEvent({name:"close",sid:"-20upkw"}),l=e.createEvent({name:"closed",sid:"avevxu"}),m=e.createEvent({name:"cancelled",sid:"808tq5"});return e.sample({and:[{clock:c,target:[i]}],or:{sid:"p3r2ad"}}),e.sample({and:[{clock:c,fn:r,target:o}],or:{sid:"p6i196"}}),e.split({and:[{source:i,match:()=>"undefined"==typeof window?"server":"client",cases:{server:p,client:d}}],or:{sid:"plch9x"}}),e.sample({and:[{clock:u,target:l}],or:{sid:"q1ub2r"}}),e.sample({and:[{clock:[i.map(()=>!0),l.map(()=>!1)],target:s}],or:{sid:"q4la1k"}}),{"@@type":"pathless-route",$params:o,$isOpened:s,$isPending:n,open:c,opened:i,openedOnClient:d,openedOnServer:p,close:u,closed:l,cancelled:m,path:"",beforeOpen:a,"@@unitShape":()=>({params:o,isOpened:s,isPending:n,onOpen:c,onClose:u})}}function l(e){const t=new URL(decodeURIComponent(e.search));return{pathname:t.pathname,search:t.search,hash:t.hash}}exports.chainRoute=function(t){const{route:a,beforeOpen:n,openOn:r,cancelOn:o}=t;let s;const c=e.createEffect(()=>null==s?void 0:s(),{name:"waitForAsyncBundleFx",sid:"t7u37u"}),i=e.createEffect(async e=>{await c();for(const t of[].concat(n))await t(e)},{name:"openFx",sid:"-34g13p"}),p=e=>e&&"params"in e?e.params:{},d=u({transformer:p});return e.sample({and:[{clock:a.opened,target:i}],or:{sid:"-1tngcz"}}),e.sample({and:[{clock:a.opened,fn:p,target:d.$params}],or:{sid:"-1qwhe6"}}),r&&e.sample({and:[{clock:r,source:d.$params,fn:e=>({params:e}),target:d.open}],or:{sid:"-1bi8qc"}}),o&&(e.sample({and:[{clock:[a.closed].concat(o),target:d.close}],or:{sid:"-v0exi"}}),e.sample({and:[{clock:[].concat(o),target:d.cancelled}],or:{sid:"-s9fyp"}})),Object.assign(d,{internal:{setAsyncImport:e=>s=e}})},exports.createRoute=function(){let a,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r=n.beforeOpen??[],o=e.createEffect(async e=>{await v(),await k();const t=n.parent;return t&&await t.internal.openFx({...e??{params:{}},navigate:!1}),e},{name:"openFx",sid:"sf5hhk"}),s=e.createEffect(async e=>{const t=n.parent;return t&&await t.internal.forceOpenParentFx({...e??{params:{}},navigate:!1}),e},{name:"forceOpenParentFx",sid:"acd7wj"}),c=e.attach({and:{effect:o},or:{name:"navigatedFx",sid:"ci6eci"}}),i=e.createStore({},{name:"$params",sid:"p3bnh9"}),p=e.createStore(!1,{name:"$isOpened",sid:"o5kkev"}),d=o.pending,u=e.createEvent({name:"open",sid:"-bhgc3p"}),l=e.createEvent({name:"close",sid:"vypd6z"}),m=e.createEvent({name:"opened",sid:"-uyucke"}),f=e.createEvent({name:"openedOnServer",sid:"mewjoi"}),h=e.createEvent({name:"openedOnClient",sid:"63cfjt"}),g=e.createEvent({name:"navigated",sid:"mycajg"}),y=e.createEvent({name:"closed",sid:"5idv7d"}),v=e.createEffect(()=>null==a?void 0:a(),{name:"waitForAsyncBundleFx",sid:"-6s0q41"}),k=e.createEffect(async()=>{for(const e of r)await e()},{name:"beforeOpenFx",sid:"7f9gfq"}),w={};return e.sample({and:[{clock:u,target:o}],or:{sid:"-yxhjaa"}}),e.sample({and:[{clock:g,fn:e=>({navigate:!1,...e}),target:c}],or:{sid:"-yj6vuw"}}),e.sample({and:[{clock:c.done,fn:e=>{let{params:t}=e;return t},target:s}],or:{sid:"-yfw4aq"}}),t.createAction({clock:[c.doneData,s.doneData],target:{$params:i},fn:(e,t)=>t?e.$params("params"in t?{...t.params}:w):e.$params(w)}),e.sample({and:[{clock:c.failData,fn:()=>w,target:i}],or:{sid:"-xhsvic"}}),t.createAction({clock:[c.doneData,s.doneData],target:{openedOnServer:f,openedOnClient:h},fn:(e,t)=>"undefined"==typeof window?e.openedOnServer(t):e.openedOnClient(t)}),e.sample({and:[{clock:[h,f],target:m}],or:{sid:"-w72d2n"}}),e.sample({and:[{clock:l,target:y}],or:{sid:"-w4be3u"}}),e.sample({and:[{clock:[m.map(()=>!0),y.map(()=>!1)],target:p}],or:{sid:"-ls2oed"}}),{$params:i,$isOpened:p,$isPending:d,open:u,closed:y,opened:m,openedOnClient:h,openedOnServer:f,...n,internal:{navigated:g,close:l,openFx:o,forceOpenParentFx:s,setAsyncImport:e=>a=e},"@@unitShape":()=>({params:i,isPending:d,isOpened:p,onOpen:u})}},exports.createRouter=function(n){const{base:r="/",routes:o}=n,{$path:s,$query:u,$history:l,back:m,forward:f,navigate:h,setHistory:g,locationUpdated:y}=n.controls??i();function v(e){return"/"===r?e:"/"===e?r:`${r}${e}`}const k=e.createEvent({name:"connectToParentRouter",sid:"t0jaae"});let w=null;const $=[];function b(t){if(d.pathlessRoute(t)){const{build:e,parse:n}=a.compile(v(t.path));return{route:t.route,path:t.path,build:e,parse:n}}if(d.router(t))return e.sample({and:[{clock:g,target:t.setHistory}],or:{sid:"ez3kyw"}}),null;let n=t;const r=[];for(r.unshift(n.path);n.parent&&!p.pathlessRoute(n.parent);)n=n.parent,"/"!==n.path&&r.unshift(n.path);const o=v(r.join("")),{build:s,parse:c}=a.compile(o);return{route:t,path:o,build:s,parse:c}}const q=o.reduce((e,t)=>{const a=b(t);return a&&($.push(a),e.push(a)),d.router(t)&&$.push(...t.knownRoutes),e},[]),x=s.map(e=>{const t=[];if(!e)return t;for(const{route:a,parse:n}of q)n(e)&&t.push(a);return t}),R=e.attach({and:{source:{query:u,path:s},effect:async t=>{let{query:a,path:n}=t;for(const{route:r,parse:o}of q){const t=o(n),[s,c]=[e.scopeBind(r.internal.close),e.scopeBind(r.internal.navigated)];t?c({query:a,params:t.params}):s()}}},or:{name:"openRoutesByPathFx",sid:"-bl0nuq"}});function O(e){let{route:a,build:n}=e;t.createAction({clock:a.internal.openFx.doneData,target:{navigate:h},fn:(e,t)=>{if(!1===(null==t?void 0:t.navigate))return;const a={path:n(t&&"params"in t?t.params:void 0),query:(null==t?void 0:t.query)??{},replace:null==t?void 0:t.replace};return e.navigate(a)}})}for(const e of q)O(e);return e.sample({and:[{clock:y,fn:e=>({path:e.pathname,query:e.query}),target:R}],or:{sid:"ukhip5"}}),{"@@type":"router",$query:u,$path:s,$history:l,$activeRoutes:x,back:m,forward:f,navigate:h,setHistory:g,ownRoutes:q,knownRoutes:$,internal:{connectToParentRouter:k,get parent(){return w},set parent(e){w=e},base:r},trackQuery:c({$activeRoutes:x,$query:u,navigate:h}),registerRoute:e=>{const t=b(e);t&&($.push(t),q.push(t),O(t)),d.router(e)&&$.push(...e.knownRoutes)},"@@unitShape":()=>({query:u,path:s,activeRoutes:x,onBack:m,onForward:f,onNavigate:h})}},exports.createRouterControls=i,exports.createVirtualRoute=u,exports.group=function(t){const a=u({$isPending:e.withFactory({sid:"-u1putn",fn:()=>r.or(...t.map(e=>e.$isPending)),name:"$isPending",method:"or"})});return e.sample({and:[{clock:t.map(e=>e.$isOpened),filter:e.withFactory({sid:"76kf3k",fn:()=>r.or(...t.map(e=>e.$isOpened)),name:"filter",method:"or"}),fn:()=>{},target:a.open}],or:{sid:"-xmoke0"}}),e.sample({and:[{clock:t.map(e=>e.$isOpened),filter:e.withFactory({sid:"ahvrux",fn:()=>r.not(e.withFactory({sid:"xs5yb9",fn:()=>r.or(...t.map(e=>e.$isOpened)),name:"fn",method:"or"})),name:"filter",method:"not"}),fn:()=>{},target:a.close}],or:{sid:"-x7abrw"}}),a},exports.historyAdapter=function(e){return{location:e.location,push:e.push.bind(e),replace:e.replace.bind(e),goBack:e.back.bind(e),goForward:e.forward.bind(e),listen:t=>{const a=e.listen(e=>{let{location:a}=e;return t(a)});return Object.assign(a,{unsubscribe:a})}}},exports.is=p,exports.queryAdapter=function(e){return{location:l(e.location),push:t=>{if("string"==typeof t){const a=new URL(e.location.pathname);a.search=t,e.push(a.toString())}else{const a=new URL(e.location.pathname);a.search=`${t.pathname??""}${t.search??""}${t.hash??""}`,e.push(a.toString())}},replace:t=>{if("string"==typeof t){const a=new URL(e.location.pathname);a.search=t,e.replace(a.toString())}else{const a=new URL(e.location.pathname);a.search=`${t.pathname??""}${t.search??""}${t.hash??""}`,e.replace(a.toString())}},goBack:()=>{e.back()},goForward:()=>{e.forward()},listen:t=>{const a=e.listen(e=>{let{location:a}=e;return t(l(a))});return Object.assign(a,{unsubscribe:a})}}};
|
package/dist/index.d.ts
CHANGED
|
@@ -7,12 +7,17 @@ import { Parser } from '@argon-router/paths';
|
|
|
7
7
|
import { ParseUrlParams } from '@argon-router/paths';
|
|
8
8
|
import { Store } from 'effector';
|
|
9
9
|
import { StoreWritable } from 'effector';
|
|
10
|
+
import { Subscription } from 'effector';
|
|
10
11
|
import { Unit } from 'effector';
|
|
11
12
|
import { ValidatePath } from '@argon-router/paths';
|
|
12
|
-
import { z } from 'zod';
|
|
13
|
-
import { ZodType } from 'zod';
|
|
13
|
+
import { z } from 'zod/v4';
|
|
14
|
+
import { ZodType } from 'zod/v4';
|
|
14
15
|
|
|
15
|
-
declare type
|
|
16
|
+
declare type AsyncBundleImport = () => Promise<{
|
|
17
|
+
default: any;
|
|
18
|
+
}>;
|
|
19
|
+
|
|
20
|
+
declare type BeforeOpenUnit<T extends object | void = void> = (T extends void ? EventCallable<void> | EventCallable<OpenPayloadBase> : EventCallable<{
|
|
16
21
|
params: T;
|
|
17
22
|
} & OpenPayloadBase>) | Effect<RouteOpenedPayload<T>, any>;
|
|
18
23
|
|
|
@@ -57,9 +62,9 @@ declare type BeforeOpenUnit<T> = (T extends void ? EventCallable<void> | EventCa
|
|
|
57
62
|
* const postLoadedRoute = chainRoute({ route: authorizedRoute, ... });
|
|
58
63
|
* ```
|
|
59
64
|
*/
|
|
60
|
-
export declare function chainRoute<T>(props: ChainRouteProps<T>): VirtualRoute<RouteOpenedPayload<T>, T>;
|
|
65
|
+
export declare function chainRoute<T extends object | void = void>(props: ChainRouteProps<T>): VirtualRoute<RouteOpenedPayload<T>, T>;
|
|
61
66
|
|
|
62
|
-
declare interface ChainRouteProps<T> {
|
|
67
|
+
declare interface ChainRouteProps<T extends object | void = void> {
|
|
63
68
|
route: Route<T>;
|
|
64
69
|
beforeOpen: BeforeOpenUnit<T> | BeforeOpenUnit<T>[];
|
|
65
70
|
openOn?: Unit<any> | Unit<any>[];
|
|
@@ -91,17 +96,17 @@ declare interface ChainRouteProps<T> {
|
|
|
91
96
|
* posts.open(); // profile.$isOpened -> true, posts.$isOpened -> true
|
|
92
97
|
* ```
|
|
93
98
|
*/
|
|
94
|
-
export declare function createRoute<T extends string, Params = ParseUrlParams<T>>(config: CreateRouteConfig<T>):
|
|
99
|
+
export declare function createRoute<T extends string, Params extends object | void = ParseUrlParams<T>>(config: CreateRouteConfig<T>): PathRoute<Params>;
|
|
100
|
+
|
|
101
|
+
export declare function createRoute<Params extends object | void = void>(config?: WithBaseRouteConfig): PathlessRoute<Params>;
|
|
95
102
|
|
|
96
|
-
declare type CreateRouteConfig<Path> = ValidatePath<Path> extends ['invalid', infer Template] ? {
|
|
103
|
+
declare type CreateRouteConfig<Path> = ValidatePath<Path> extends ['invalid', infer Template] ? WithBaseRouteConfig<{
|
|
97
104
|
path: Template;
|
|
98
|
-
|
|
99
|
-
beforeOpen?: Effect<void, any, any>[];
|
|
100
|
-
} : {
|
|
105
|
+
}> : WithBaseRouteConfig<{
|
|
101
106
|
path: Path;
|
|
102
107
|
parent?: Route<any>;
|
|
103
108
|
beforeOpen?: Effect<void, any, any>[];
|
|
104
|
-
}
|
|
109
|
+
}>;
|
|
105
110
|
|
|
106
111
|
/**
|
|
107
112
|
* @description Creates argon router
|
|
@@ -191,11 +196,56 @@ export declare function createVirtualRoute<T = void, TransformerResult = void>(o
|
|
|
191
196
|
*/
|
|
192
197
|
export declare function group(routes: Route<any>[]): VirtualRoute<void, void>;
|
|
193
198
|
|
|
199
|
+
export declare function historyAdapter(history: History_2): RouterAdapter;
|
|
200
|
+
|
|
201
|
+
declare type InputRoute = PathRoute<any> | {
|
|
202
|
+
path: string;
|
|
203
|
+
route: PathlessRoute<any>;
|
|
204
|
+
} | Router;
|
|
205
|
+
|
|
206
|
+
declare type InternalOpenedPayload<T> = RouteOpenedPayload<T> & {
|
|
207
|
+
navigate?: boolean;
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
declare interface InternalPathlessRoute<T extends object | void = any> extends PathlessRoute<T> {
|
|
211
|
+
internal: InternalRouteParams<T>;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
declare interface InternalPathRoute<T extends object | void = any> extends PathRoute<T> {
|
|
215
|
+
internal: InternalRouteParams<T>;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
declare type InternalRoute<T extends object | void = any> = InternalPathRoute<T> | InternalPathlessRoute<T>;
|
|
219
|
+
|
|
220
|
+
declare interface InternalRouteParams<T> {
|
|
221
|
+
close: EventCallable<void>;
|
|
222
|
+
navigated: EventCallable<RouteOpenedPayload<T>>;
|
|
223
|
+
openFx: Effect<InternalOpenedPayload<T>, InternalOpenedPayload<T>, Error>;
|
|
224
|
+
forceOpenParentFx: Effect<InternalOpenedPayload<T>, InternalOpenedPayload<T>, Error>;
|
|
225
|
+
setAsyncImport: (value: AsyncBundleImport) => void;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export declare const is: {
|
|
229
|
+
route<T extends object | void = void>(input: unknown): input is Route<T>;
|
|
230
|
+
pathRoute<T extends object | void = void>(input: unknown): input is PathRoute<T>;
|
|
231
|
+
pathlessRoute<T extends object | void = void>(input: unknown): input is PathlessRoute<T>;
|
|
232
|
+
router(input: unknown): input is Router;
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
declare type ListenCallback = (location: RouterLocation) => void;
|
|
236
|
+
|
|
194
237
|
declare type LocationState = {
|
|
195
238
|
path: string;
|
|
196
239
|
query: Query;
|
|
197
240
|
};
|
|
198
241
|
|
|
242
|
+
export declare type MappedRoute = {
|
|
243
|
+
route: InternalRoute<any>;
|
|
244
|
+
path: string;
|
|
245
|
+
build: Builder<any>;
|
|
246
|
+
parse: Parser<any>;
|
|
247
|
+
};
|
|
248
|
+
|
|
199
249
|
export declare type NavigatePayload = {
|
|
200
250
|
query: Query;
|
|
201
251
|
path?: string;
|
|
@@ -207,23 +257,8 @@ export declare type OpenPayloadBase = {
|
|
|
207
257
|
replace?: boolean;
|
|
208
258
|
};
|
|
209
259
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
export declare interface QueryTracker<ParametersConfig extends ZodType> {
|
|
213
|
-
entered: Event_2<z.infer<ParametersConfig>>;
|
|
214
|
-
exited: Event_2<void>;
|
|
215
|
-
enter: EventCallable<z.infer<ParametersConfig>>;
|
|
216
|
-
exit: EventCallable<{
|
|
217
|
-
ignoreParams: string[];
|
|
218
|
-
} | void>;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
export declare type QueryTrackerConfig<ParametersConfig extends ZodType> = {
|
|
222
|
-
forRoutes?: Route<any>[];
|
|
223
|
-
parameters: ParametersConfig;
|
|
224
|
-
};
|
|
225
|
-
|
|
226
|
-
export declare interface Route<T = void> {
|
|
260
|
+
declare interface PathlessRoute<T extends object | void = void> {
|
|
261
|
+
'@@type': 'pathless-route';
|
|
227
262
|
$params: Store<T>;
|
|
228
263
|
$isOpened: Store<boolean>;
|
|
229
264
|
$isPending: Store<boolean>;
|
|
@@ -232,8 +267,7 @@ export declare interface Route<T = void> {
|
|
|
232
267
|
openedOnServer: Event_2<RouteOpenedPayload<T>>;
|
|
233
268
|
openedOnClient: Event_2<RouteOpenedPayload<T>>;
|
|
234
269
|
closed: Event_2<void>;
|
|
235
|
-
|
|
236
|
-
parent?: Route<any>;
|
|
270
|
+
parent?: PathRoute<any> | PathlessRoute<any>;
|
|
237
271
|
beforeOpen?: Effect<any, any, any>[];
|
|
238
272
|
'@@unitShape': () => {
|
|
239
273
|
params: Store<T>;
|
|
@@ -243,19 +277,46 @@ export declare interface Route<T = void> {
|
|
|
243
277
|
};
|
|
244
278
|
}
|
|
245
279
|
|
|
246
|
-
|
|
280
|
+
declare interface PathRoute<T extends object | void = void> extends Omit<PathlessRoute<T>, '@@type'> {
|
|
281
|
+
'@@type': 'path-route';
|
|
282
|
+
path: string;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
export declare type Query = Record<string, string | null | Array<string | null>>;
|
|
286
|
+
|
|
287
|
+
export declare function queryAdapter(history: History_2): RouterAdapter;
|
|
288
|
+
|
|
289
|
+
export declare interface QueryTracker<ParametersConfig extends ZodType> {
|
|
290
|
+
entered: Event_2<z.infer<ParametersConfig>>;
|
|
291
|
+
exited: Event_2<void>;
|
|
292
|
+
enter: EventCallable<z.infer<ParametersConfig>>;
|
|
293
|
+
exit: EventCallable<{
|
|
294
|
+
ignoreParams: string[];
|
|
295
|
+
} | void>;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
export declare type QueryTrackerConfig<ParametersConfig extends ZodType> = {
|
|
299
|
+
forRoutes?: Route<any>[];
|
|
300
|
+
check?: Event_2<void>;
|
|
301
|
+
parameters: ParametersConfig;
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
export declare type Route<T extends object | void = void> = PathRoute<T> | PathlessRoute<T>;
|
|
305
|
+
|
|
306
|
+
export declare type RouteOpenedPayload<T> = T extends void ? void | OpenPayloadBase : {
|
|
247
307
|
params: T;
|
|
248
308
|
} & OpenPayloadBase;
|
|
249
309
|
|
|
250
310
|
export declare interface Router {
|
|
311
|
+
'@@type': 'router';
|
|
251
312
|
$query: Store<Query>;
|
|
252
313
|
$path: Store<string>;
|
|
314
|
+
$history: Store<RouterAdapter | null>;
|
|
253
315
|
$activeRoutes: Store<Route<any>[]>;
|
|
254
316
|
back: EventCallable<void>;
|
|
255
317
|
forward: EventCallable<void>;
|
|
256
318
|
navigate: EventCallable<NavigatePayload>;
|
|
257
|
-
setHistory: EventCallable<
|
|
258
|
-
routes: Route<any>[];
|
|
319
|
+
setHistory: EventCallable<RouterAdapter>;
|
|
259
320
|
/**
|
|
260
321
|
* @description Creates query params tracker
|
|
261
322
|
* @param config Query tacker config
|
|
@@ -282,12 +343,12 @@ export declare interface Router {
|
|
|
282
343
|
* ```
|
|
283
344
|
*/
|
|
284
345
|
trackQuery: <ParametersConfig extends ZodType>(config: QueryTrackerConfig<ParametersConfig>) => QueryTracker<ParametersConfig>;
|
|
285
|
-
|
|
286
|
-
|
|
346
|
+
ownRoutes: MappedRoute[];
|
|
347
|
+
knownRoutes: MappedRoute[];
|
|
348
|
+
registerRoute: (route: PathRoute<any> | {
|
|
287
349
|
path: string;
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
}[];
|
|
350
|
+
route: PathlessRoute<any>;
|
|
351
|
+
} | Router) => void;
|
|
291
352
|
'@@unitShape': () => {
|
|
292
353
|
query: Store<Query>;
|
|
293
354
|
path: Store<string>;
|
|
@@ -298,17 +359,27 @@ export declare interface Router {
|
|
|
298
359
|
};
|
|
299
360
|
}
|
|
300
361
|
|
|
362
|
+
export declare interface RouterAdapter {
|
|
363
|
+
location: RouterLocation;
|
|
364
|
+
push: (to: To) => void;
|
|
365
|
+
replace: (to: To) => void;
|
|
366
|
+
goBack: () => void;
|
|
367
|
+
goForward: () => void;
|
|
368
|
+
listen: (callback: ListenCallback) => Subscription;
|
|
369
|
+
}
|
|
370
|
+
|
|
301
371
|
declare interface RouterConfig {
|
|
302
372
|
base?: string;
|
|
303
|
-
routes:
|
|
373
|
+
routes: InputRoute[];
|
|
374
|
+
controls?: RouterControls;
|
|
304
375
|
}
|
|
305
376
|
|
|
306
377
|
declare interface RouterControls {
|
|
307
|
-
$history: StoreWritable<
|
|
378
|
+
$history: StoreWritable<RouterAdapter | null>;
|
|
308
379
|
$locationState: StoreWritable<LocationState>;
|
|
309
380
|
$query: Store<Query>;
|
|
310
381
|
$path: Store<string>;
|
|
311
|
-
setHistory: EventCallable<
|
|
382
|
+
setHistory: EventCallable<RouterAdapter>;
|
|
312
383
|
navigate: EventCallable<NavigatePayload>;
|
|
313
384
|
back: EventCallable<void>;
|
|
314
385
|
forward: EventCallable<void>;
|
|
@@ -321,7 +392,7 @@ declare interface RouterControls {
|
|
|
321
392
|
* @param config Query tacker config
|
|
322
393
|
* @link https://movpushmov.dev/argon-router/core/track-query.html
|
|
323
394
|
* @example ```ts
|
|
324
|
-
* import { z } from 'zod';
|
|
395
|
+
* import { z } from 'zod/v4';
|
|
325
396
|
* import { router } from '@shared/router';
|
|
326
397
|
* import { createDialog } from '...';
|
|
327
398
|
*
|
|
@@ -346,7 +417,16 @@ declare interface RouterControls {
|
|
|
346
417
|
trackQuery: <T extends ZodType>(config: Omit<QueryTrackerConfig<T>, 'forRoutes'>) => QueryTracker<T>;
|
|
347
418
|
}
|
|
348
419
|
|
|
420
|
+
export declare interface RouterLocation {
|
|
421
|
+
pathname: string;
|
|
422
|
+
search: string;
|
|
423
|
+
hash: string;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
declare type To = string | Partial<RouterLocation>;
|
|
427
|
+
|
|
349
428
|
export declare interface VirtualRoute<T, TransformerResult> {
|
|
429
|
+
'@@type': 'pathless-route';
|
|
350
430
|
$params: StoreWritable<TransformerResult>;
|
|
351
431
|
$isOpened: StoreWritable<boolean>;
|
|
352
432
|
$isPending: Store<boolean>;
|
|
@@ -374,4 +454,9 @@ declare interface VirtualRouteOptions<T, TransformerResult> {
|
|
|
374
454
|
transformer?: (payload: T) => TransformerResult;
|
|
375
455
|
}
|
|
376
456
|
|
|
457
|
+
declare type WithBaseRouteConfig<T = void> = T & {
|
|
458
|
+
parent?: Route<any>;
|
|
459
|
+
beforeOpen?: Effect<void, any, any>[];
|
|
460
|
+
};
|
|
461
|
+
|
|
377
462
|
export { }
|