@argon-router/core 0.10.1 → 0.11.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 +40 -51
- package/dist/index.js +109 -203
- package/package.json +5 -4
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"),r=require("patronum");const n={any:Symbol("any"),number:Symbol("number"),string:Symbol("string"),array:Symbol("array"),boolean:Symbol("boolean")};function t(e,a){for(const r of e)if(a.includes(r))return!0;return!1}function s(e,a){for(const r in a){const t=a[r];if(Array.isArray(t)&&(!e[r]||JSON.stringify(t)!==e[r]))return!1;switch(typeof t){case"number":if(!e[r]||t.toString()!==e[r])return!1;break;case"object":if(!e[r]||JSON.stringify(t)!==e[r])return!1;break;case"string":if(!e[r]||t!==e[r])return!1;break;case"boolean":if(!e[r]||!["0","1","false","true"].includes(e[r]))return!1}switch(t){case n.any:if(!e[r])return!1;break;case n.string:if(!e[r]||Array.isArray(e[r]))return!1;break;case n.array:if(!e[r]||!Array.isArray(e[r]))return!1;break;case n.number:if(!e[r]||Array.isArray(e[r])||isNaN(parseInt(e[r]))&&isNaN(parseFloat(e[r])))return!1;break;case n.boolean:if(!e[r]||Array.isArray(e[r])||!["0","1","false","true"].includes(e[r]))return!1}}return!0}function o(a){let{$query:r,navigate:n}=a;return i({$activeRoutes:e.createStore([],{name:"$activeRoutes",sid:"85ms46"}),$query:r,navigate:n})}function i(a){let{$activeRoutes:r,$query:o,navigate:i}=a;return a=>{const{parameters:c,forRoutes:l}=a,p=e.createStore(!1,{name:"$entered",sid:"-mo5ecc"}),d=e.createEvent({name:"entered",sid:"kuzfr"}),u=e.createEvent({name:"exited",sid:"-jzwna6"}),m=e.createEvent({name:"exit",sid:"7hfy2r"}),f=e.createEvent({name:"changeEntered",sid:"qh8w6v"});return e.sample({and:[{clock:f,target:p}],or:{sid:"-gf1fe4"}}),e.sample({and:[{source:{activeRoutes:r,query:o},filter:e=>{let{activeRoutes:a,query:r}=e;return(!l||t(l,a))&&s(r,c)},fn:e=>{let{query:a}=e;return function(e,a){const r={};for(const t in a){const s=a[t],o=e[t];if(Array.isArray(s)){const a=e[t];r[t]=a;continue}switch(typeof s){case"number":r[t]=isNaN(parseInt(o))?parseFloat(o):parseInt(o);break;case"object":r[t]=JSON.parse(o);break;case"string":r[t]=o;case"boolean":r[t]="1"===o||"true"===o}switch(s){case n.any:case n.string:case n.array:r[t]=e[t];break;case n.number:{const a=e[t];r[t]=isNaN(parseInt(a))?parseFloat(a):parseInt(a);break}case n.boolean:{const a=e[t];r[t]="1"===a||"true"===a;break}}}return r}(a,c)},target:[d,f.prepend(()=>!0)]}],or:{sid:"-gcagfb"}}),e.sample({and:[{source:{activeRoutes:r,query:o,entered:p},filter:e=>{let{activeRoutes:a,query:r,entered:n}=e;return n&&!((!l||t(l,a))&&s(r,c))},target:[u.prepend(()=>{}),f.prepend(()=>!1)]}],or:{sid:"-fvsmmh"}}),e.sample({and:[{clock:m,source:o,fn:(e,a)=>{if(a&&a.ignoreParams){const r={};for(const n of a.ignoreParams)e[n]&&(r[n]=e[n]);return{query:r}}return{query:{}}},target:i}],or:{sid:"-f105e9"}}),{entered:d,exited:u,exit:m}}}function c(e){return a=>{const r=a.split("/").map(e=>e.trim()).filter(e=>""!==e);let n=null;function t(e,a){n||(n={}),n[e]=a}if(0===e.length)return 0===r.length?{path:a,params:null}:null;for(let s=0;s<e.length;s++){const a=e[s];switch(a.type){case"const":if(a.name!==r.shift())return null;continue;case"parameter":{const{arrayProps:n,genericProps:o,required:i}=a.payload;if(n){const i=[];let c;for(;c=r.shift(),c;){switch(null==o?void 0:o.type){case"number":if(isNaN(+c))return null;i.push(+c);break;case"union":if(!o.items.includes(c))return null;i.push(c);break;default:i.push(c)}if(i.length>=(n.max??1/0))break}if(i.length<(n.min??0))return null;if(r.length>0&&!e[s+1])return null;t(a.name,i);break}const c=r.shift();if(i&&!c)return null;if(!c){t(a.name,void 0);continue}switch(null==o?void 0:o.type){case"number":if(isNaN(+c))return null;t(a.name,+c);break;case"union":if(!o.items.includes(c))return null;t(a.name,c);break;default:t(a.name,c)}}}}return r.length>0?null:{path:a,params:n}}}function l(e){if(!e)return null;const a=e[1];let r,n,t;for(const s of e.slice(2))s&&(s.includes("<")?r=s.replaceAll(/\s/g,"").replace("<","").replace(">",""):(s.includes("{")&&(n=s.replace("{","").replace("}","").split(",").map(e=>parseInt(e))),["*","?","+"].includes(s)&&(t=s)));return{name:a,genericProps:r,arrayProps:n,modificator:t}}function p(e){return a=>{const r=[];if(0===e.length)return"/";for(const n of e)switch(n.type){case"const":r.push(n.name);break;case"parameter":if(!a[n.name])continue;if(Array.isArray(a[n.name]))for(const e of a[n.name])r.push(e.toString());else r.push(a[n.name].toString())}return`/${r.join("/")}`}}function d(){const r=e.createStore(null,{and:{serialize:"ignore"},name:"$history",sid:"-ld7lzl"}),n=e.createStore({query:{},path:null},{name:"$locationState",sid:"-4u3w85"}),t=n.map(e=>e.query),s=n.map(e=>e.path),i=e.createEvent({name:"setHistory",sid:"-ormmkk"}),c=e.createEvent({name:"navigate",sid:"tawqep"}),l=e.createEvent({name:"back",sid:"bxy8rt"}),p=e.createEvent({name:"forward",sid:"-bpmzb1"}),d=e.createEvent({name:"locationUpdated",sid:"lkzldx"}),u=e.attach({and:{source:r,effect:(e,r)=>{let{path:n,query:t,replace:s}=r;if(!e)throw new Error("history not found");const o={pathname:n,search:`?${a.stringify(t)}`};s?e.replace(o):e.push(o)}},or:{name:"navigateFx",sid:"-ov1xn7"}}),m=e.createEffect(r=>{const n=e.scopeBind(d);if(n({pathname:r.location.pathname,query:{...a.parse(r.location.search)}}),!r)throw new Error;r.listen(e=>{let{location:r}=e;n({pathname:r.pathname,query:{...a.parse(r.search)}})})},{name:"subscribeHistoryFx",sid:"-m60vds"});return e.sample({and:[{clock:i,target:r}],or:{sid:"ii4q"}}),e.sample({and:[{clock:r,filter:Boolean,target:m}],or:{sid:"39h3j"}}),e.sample({and:[{clock:d,fn:e=>({path:e.pathname,query:e.query}),target:n}],or:{sid:"i3x4a"}}),e.sample({and:[{clock:c,source:s,fn:(e,a)=>({path:e,...a}),target:u}],or:{sid:"ylqx4"}}),{$history:r,$locationState:n,$query:t,$path:s,setHistory:i,navigate:c,back:l,forward:p,locationUpdated:d,trackQuery:o({$query:t,navigate:c})}}function u(){let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:e.createStore(!1,{and:{name:"pending",sid:"r89aiv"},name:"pending",sid:"r89aiv"});const r=e.createStore(null,{name:"$params",sid:"-ftspin"}),n=e.createStore(!1,{name:"$isOpened",sid:"-v6936c"}),t=a,s=e.createEvent({name:"open",sid:"juc47v"}),o=e.createEvent({name:"opened",sid:"-quc8vc"}),i=e.createEvent({name:"openedOnServer",sid:"n25rh4"}),c=e.createEvent({name:"openedOnClient",sid:"-auqikx"}),l=e.createEvent({name:"close",sid:"4zlqo6"}),p=e.createEvent({name:"closed",sid:"wbpfrk"}),d=e.createEvent({name:"cancelled",sid:"-q3x5sf"});return e.sample({and:[{clock:s,target:o}],or:{sid:"-u8b34x"}}),e.split({and:[{source:o,match:()=>"undefined"==typeof window?"server":"client",cases:{server:i,client:c}}],or:{sid:"-u5k464"}}),e.sample({and:[{clock:l,target:p}],or:{sid:"-tp2ada"}}),e.sample({and:[{clock:[o.map(()=>!0),p.map(()=>!1)],target:n}],or:{sid:"-tarmxw"}}),{$params:r,$isOpened:n,$isPending:t,open:s,opened:o,openedOnClient:c,openedOnServer:i,close:l,closed:p,cancelled:d,path:null,"@@unitShape":()=>({params:r,isOpened:n,isPending:t,onOpen:s})}}exports.chainRoute=function(a){const{route:r,beforeOpen:n,openOn:t,cancelOn:s}=a;let o;const i=e.createEffect(()=>null==o?void 0:o(),{name:"waitForAsyncBundleFx",sid:"-tvp99n"}),c=e.createEffect(async e=>{await i();for(const a of[].concat(n))await a(e)},{name:"openFx",sid:"-9kc1je"}),l=u(c.pending);return e.sample({and:[{clock:r.opened,target:c}],or:{sid:"1162lk"}}),e.sample({and:[{clock:r.opened,fn:e=>e&&"params"in e?e.params:null,target:l.$params}],or:{sid:"13x1kd"}}),t&&e.sample({and:[{clock:t,source:{params:l.$params},fn:e=>{let{params:a}=e;return{params:a}},target:l.open}],or:{sid:"1kevex"}}),s&&(e.sample({and:[{clock:[r.closed].concat(s),target:l.close}],or:{sid:"20wp7r"}}),e.sample({and:[{clock:[].concat(s),target:l.cancelled}],or:{sid:"2f7cn5"}})),Object.assign(l,{internal:{setAsyncImport:e=>o=e}})},exports.createRoute=function(a){let r;const n=e.createEffect(async e=>{await f(),await y();const r=a.parent;return r&&await r.internal.openFx({...e??{params:{}},navigate:!1}),e},{name:"openFx",sid:"awhgwd"}),t=e.createStore({},{name:"$params",sid:"-oahffx"}),s=e.createStore(!1,{name:"$isOpened",sid:"-6l68oe"}),o=n.pending,i=e.createEvent({name:"open",sid:"gjsrgc"}),c=e.createEvent({name:"close",sid:"-yagmc8"}),l=e.createEvent({name:"opened",sid:"x0iwhi"}),p=e.createEvent({name:"openedOnServer",sid:"346r3u"}),d=e.createEvent({name:"openedOnClient",sid:"31q95t"}),u=e.createEvent({name:"navigated",sid:"-t30l0x"}),m=e.createEvent({name:"closed",sid:"uue4ce"}),f=e.createEffect(()=>null==r?void 0:r(),{name:"waitForAsyncBundleFx",sid:"-nml5ho"}),y=e.createEffect(async()=>{for(const e of a.beforeOpen??[])await e()},{name:"beforeOpenFx",sid:"-vqlnbm"}),g=e.attach({and:{effect:n},or:{name:"navigatedFx",sid:"a4yadj"}}),h={};return e.sample({and:[{clock:i,target:n}],or:{sid:"ynxuww"}}),e.sample({and:[{clock:u,fn:e=>({navigate:!1,...e}),target:g}],or:{sid:"z28ica"}}),e.sample({and:[{clock:g.doneData,fn:e=>e&&"params"in e?{...e.params}:h,target:t}],or:{sid:"z5j9wg"}}),e.sample({and:[{clock:g.failData,fn:()=>h,target:t}],or:{sid:"-z1vw16"}}),e.split({and:[{source:g.doneData,match:()=>"undefined"==typeof window?"server":"client",cases:{server:p,client:d}}],or:{sid:"-yyl4h0"}}),e.sample({and:[{clock:[d,p],target:l}],or:{sid:"-yhji2t"}}),e.sample({and:[{clock:c,target:m}],or:{sid:"-y38unf"}}),e.sample({and:[{clock:[l.map(()=>!0),m.map(()=>!1)],target:s}],or:{sid:"-y0hvom"}}),{$params:t,$isOpened:s,$isPending:o,open:i,closed:m,opened:l,openedOnClient:d,openedOnServer:p,...a,internal:{navigated:u,close:c,openFx:n,setAsyncImport:e=>r=e},"@@unitShape":()=>({params:t,isPending:o,isOpened:s,onOpen:i})}},exports.createRouter=function(a){const{base:r="/",routes:n}=a,{$path:t,$query:s,back:o,forward:u,navigate:m,setHistory:f,locationUpdated:y}=d(),g=n.map(e=>{let a=e;const n=[];for(n.unshift(a.path);a.parent;)a=a.parent,"/"!==a.path&&n.unshift(a.path);const t="/"===r?n.join(""):[r,...n].join(""),{build:s,parse:o}=function(e){const a=[],r=/:(\w+)(<[\s?\w|]+>)?({\d+\,\d+})?([+*?])?/,n=e.split("/").filter(Boolean);for(let t=0;t<n.length;t++){const s=n[t];if(!s)continue;const o=l(s.match(r));if(!o){a.push({type:"const",name:s,payload:void 0});continue}const{arrayProps:i,genericProps:c,modificator:p,name:d}=o;if(!d)throw new Error(`Invalid path: "${e}". Name for argument must be provided`);const u={type:"parameter",name:d,payload:{required:!0}};switch(c&&"number"===c&&(u.payload.genericProps={type:"number"}),c&&c.includes("|")&&(u.payload.genericProps={type:"union",items:c.split("|")}),p){case"*":u.payload.arrayProps={};break;case"+":u.payload.arrayProps={min:1};break;case"?":u.payload.required=!1}i&&(u.payload.arrayProps={...u.payload.arrayProps,min:i[0],max:i[1]}),a.push(u)}return{parse:c(a),build:p(a)}}(t);return{route:e,path:t,build:s,parse:o}}),h=t.map(e=>{const a=[];if(!e)return a;for(const{route:r,parse:n}of g)n(e)&&a.push(r);return a}),v=e.attach({and:{source:{query:s,path:t},effect:async a=>{let{query:r,path:n}=a;for(const{route:t,parse:s}of g){const a=s(n),[o,i]=[e.scopeBind(t.internal.close),e.scopeBind(t.internal.navigated)];a?i({query:r,params:a.params}):o()}}},or:{name:"openRoutesByPathFx",sid:"-3zl7vq"}});for(const{route:i,build:c}of g)e.sample({and:[{clock:i.internal.openFx.doneData,filter:e=>!1!==(null==e?void 0:e.navigate),fn:e=>({path:c(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:s,$path:t,$activeRoutes:h,back:o,forward:u,navigate:m,routes:n,setHistory:f,mappedRoutes:g,trackQuery:i({$activeRoutes:h,$query:s,navigate:m}),"@@unitShape":()=>({query:s,path:t,activeRoutes:h,onBack:o,onForward:u,onNavigate:m})}},exports.createRouterControls=d,exports.createVirtualRoute=u,exports.group=function(a){const n=u(e.withFactory({sid:"-uirglg",fn:()=>r.or(...a.map(e=>e.$isPending)),name:"$isPending",method:"or"}));return e.sample({and:[{clock:a.map(e=>e.$isOpened),filter:e.withFactory({sid:"6pispd",fn:()=>r.or(...a.map(e=>e.$isOpened)),name:"filter",method:"or"}),fn:()=>{},target:n.open}],or:{sid:"-xn8czd"}}),e.sample({and:[{clock:a.map(e=>e.$isOpened),filter:e.withFactory({sid:"a0u5gq",fn:()=>r.not(e.withFactory({sid:"xb4bx2",fn:()=>r.or(...a.map(e=>e.$isOpened)),name:"fn",method:"or"})),name:"filter",method:"not"}),fn:()=>{},target:n.close}],or:{sid:"-x7u4d9"}}),n},exports.parameters=n;
|
|
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};
|
package/dist/index.d.ts
CHANGED
|
@@ -9,23 +9,13 @@ import { Store } from 'effector';
|
|
|
9
9
|
import { StoreWritable } from 'effector';
|
|
10
10
|
import { Unit } from 'effector';
|
|
11
11
|
import { ValidatePath } from '@argon-router/paths';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
declare const anySymbol: unique symbol;
|
|
16
|
-
|
|
17
|
-
declare type ArrayParameter = typeof arraySymbol;
|
|
18
|
-
|
|
19
|
-
declare const arraySymbol: unique symbol;
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { ZodType } from 'zod';
|
|
20
14
|
|
|
21
15
|
declare type BeforeOpenUnit<T> = (T extends void ? EventCallable<void> | EventCallable<OpenPayloadBase> : EventCallable<{
|
|
22
16
|
params: T;
|
|
23
17
|
} & OpenPayloadBase>) | Effect<RouteOpenedPayload<T>, any>;
|
|
24
18
|
|
|
25
|
-
declare type BooleanParameter = typeof booleanSymbol;
|
|
26
|
-
|
|
27
|
-
declare const booleanSymbol: unique symbol;
|
|
28
|
-
|
|
29
19
|
/**
|
|
30
20
|
* @link https://movpushmov.dev/argon-router/core/chain-route.html
|
|
31
21
|
* @param props Chain route props
|
|
@@ -67,7 +57,7 @@ declare const booleanSymbol: unique symbol;
|
|
|
67
57
|
* const postLoadedRoute = chainRoute({ route: authorizedRoute, ... });
|
|
68
58
|
* ```
|
|
69
59
|
*/
|
|
70
|
-
export declare function chainRoute<T>(props: ChainRouteProps<T>): VirtualRoute<T>;
|
|
60
|
+
export declare function chainRoute<T>(props: ChainRouteProps<T>): VirtualRoute<RouteOpenedPayload<T>, T>;
|
|
71
61
|
|
|
72
62
|
declare interface ChainRouteProps<T> {
|
|
73
63
|
route: Route<T>;
|
|
@@ -179,7 +169,7 @@ export declare function createRouter(config: RouterConfig): Router;
|
|
|
179
169
|
*/
|
|
180
170
|
export declare function createRouterControls(): RouterControls;
|
|
181
171
|
|
|
182
|
-
export declare function createVirtualRoute<T>(
|
|
172
|
+
export declare function createVirtualRoute<T = void, TransformerResult = void>(options?: VirtualRouteOptions<T, TransformerResult>): VirtualRoute<T, TransformerResult>;
|
|
183
173
|
|
|
184
174
|
/**
|
|
185
175
|
* @description Create virtual route which opens when some passed routes is opened. Closes if all passed routes are closed.
|
|
@@ -199,7 +189,7 @@ export declare function createVirtualRoute<T>(pending?: Store<boolean>): Virtual
|
|
|
199
189
|
* signUpRoute.close(); // authorizationRoute.$isOpened —> false
|
|
200
190
|
* ```
|
|
201
191
|
*/
|
|
202
|
-
export declare function group(routes: Route<any>[]): VirtualRoute<void>;
|
|
192
|
+
export declare function group(routes: Route<any>[]): VirtualRoute<void, void>;
|
|
203
193
|
|
|
204
194
|
declare type LocationState = {
|
|
205
195
|
path: string;
|
|
@@ -212,46 +202,27 @@ export declare type NavigatePayload = {
|
|
|
212
202
|
replace?: boolean;
|
|
213
203
|
};
|
|
214
204
|
|
|
215
|
-
declare type NumberParameter = typeof numberSymbol;
|
|
216
|
-
|
|
217
|
-
declare const numberSymbol: unique symbol;
|
|
218
|
-
|
|
219
205
|
export declare type OpenPayloadBase = {
|
|
220
206
|
query?: Query;
|
|
221
207
|
replace?: boolean;
|
|
222
208
|
};
|
|
223
209
|
|
|
224
|
-
export declare const parameters: Parameters_2;
|
|
225
|
-
|
|
226
|
-
declare type Parameters_2 = {
|
|
227
|
-
any: AnyParameter;
|
|
228
|
-
number: NumberParameter;
|
|
229
|
-
string: StringParameter;
|
|
230
|
-
array: ArrayParameter;
|
|
231
|
-
boolean: BooleanParameter;
|
|
232
|
-
};
|
|
233
|
-
|
|
234
210
|
export declare type Query = Record<string, string | null | Array<string | null>>;
|
|
235
211
|
|
|
236
|
-
export declare interface QueryTracker<ParametersConfig extends
|
|
237
|
-
entered: Event_2<
|
|
212
|
+
export declare interface QueryTracker<ParametersConfig extends ZodType> {
|
|
213
|
+
entered: Event_2<z.infer<ParametersConfig>>;
|
|
238
214
|
exited: Event_2<void>;
|
|
215
|
+
enter: EventCallable<z.infer<ParametersConfig>>;
|
|
239
216
|
exit: EventCallable<{
|
|
240
217
|
ignoreParams: string[];
|
|
241
218
|
} | void>;
|
|
242
219
|
}
|
|
243
220
|
|
|
244
|
-
export declare type QueryTrackerConfig<ParametersConfig extends
|
|
221
|
+
export declare type QueryTrackerConfig<ParametersConfig extends ZodType> = {
|
|
245
222
|
forRoutes?: Route<any>[];
|
|
246
223
|
parameters: ParametersConfig;
|
|
247
224
|
};
|
|
248
225
|
|
|
249
|
-
export declare type RawConfig = Record<string, AnyParameter | ArrayParameter | NumberParameter | StringParameter | BooleanParameter | SupportedPrimitive | SupportedPrimitive[]>;
|
|
250
|
-
|
|
251
|
-
export declare type ReadyConfig<T extends RawConfig> = {
|
|
252
|
-
[K in keyof T]: T[K] extends StringParameter ? string : T[K] extends NumberParameter ? number : T[K] extends ArrayParameter ? string[] : T[K] extends AnyParameter ? string | string[] : never;
|
|
253
|
-
};
|
|
254
|
-
|
|
255
226
|
export declare interface Route<T = void> {
|
|
256
227
|
$params: Store<T>;
|
|
257
228
|
$isOpened: Store<boolean>;
|
|
@@ -310,7 +281,7 @@ export declare interface Router {
|
|
|
310
281
|
* // /team?dialog=team&id=not_number
|
|
311
282
|
* ```
|
|
312
283
|
*/
|
|
313
|
-
trackQuery: <ParametersConfig extends
|
|
284
|
+
trackQuery: <ParametersConfig extends ZodType>(config: QueryTrackerConfig<ParametersConfig>) => QueryTracker<ParametersConfig>;
|
|
314
285
|
mappedRoutes: {
|
|
315
286
|
route: Route<any>;
|
|
316
287
|
path: string;
|
|
@@ -350,14 +321,16 @@ declare interface RouterControls {
|
|
|
350
321
|
* @param config Query tacker config
|
|
351
322
|
* @link https://movpushmov.dev/argon-router/core/track-query.html
|
|
352
323
|
* @example ```ts
|
|
353
|
-
* import {
|
|
324
|
+
* import { z } from 'zod';
|
|
354
325
|
* import { router } from '@shared/router';
|
|
355
326
|
* import { createDialog } from '...';
|
|
356
327
|
*
|
|
357
328
|
* const dialog = createDialog();
|
|
358
329
|
* const tracker = router.trackQuery({
|
|
359
|
-
*
|
|
360
|
-
*
|
|
330
|
+
* parameters: {
|
|
331
|
+
* dialog: z.literal('team-member'),
|
|
332
|
+
* id: z.cource.number(),
|
|
333
|
+
* },
|
|
361
334
|
* });
|
|
362
335
|
*
|
|
363
336
|
* // triggered for:
|
|
@@ -370,19 +343,35 @@ declare interface RouterControls {
|
|
|
370
343
|
* // /team?dialog=team&id=not_number
|
|
371
344
|
* ```
|
|
372
345
|
*/
|
|
373
|
-
trackQuery: <T extends
|
|
346
|
+
trackQuery: <T extends ZodType>(config: Omit<QueryTrackerConfig<T>, 'forRoutes'>) => QueryTracker<T>;
|
|
374
347
|
}
|
|
375
348
|
|
|
376
|
-
declare
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
349
|
+
export declare interface VirtualRoute<T, TransformerResult> {
|
|
350
|
+
$params: StoreWritable<TransformerResult>;
|
|
351
|
+
$isOpened: StoreWritable<boolean>;
|
|
352
|
+
$isPending: Store<boolean>;
|
|
353
|
+
open: EventCallable<T>;
|
|
354
|
+
opened: Event_2<T>;
|
|
355
|
+
openedOnServer: Event_2<T>;
|
|
356
|
+
openedOnClient: Event_2<T>;
|
|
384
357
|
close: EventCallable<void>;
|
|
358
|
+
closed: Event_2<void>;
|
|
385
359
|
cancelled: Event_2<void>;
|
|
360
|
+
path: string;
|
|
361
|
+
beforeOpen?: Effect<any, any, any>[];
|
|
362
|
+
'@@unitShape': () => {
|
|
363
|
+
params: Store<TransformerResult>;
|
|
364
|
+
isOpened: Store<boolean>;
|
|
365
|
+
isPending: Store<boolean>;
|
|
366
|
+
onOpen: EventCallable<T>;
|
|
367
|
+
onClose: EventCallable<void>;
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
declare interface VirtualRouteOptions<T, TransformerResult> {
|
|
372
|
+
beforeOpen?: Effect<void, any, any>[];
|
|
373
|
+
$isPending?: Store<boolean>;
|
|
374
|
+
transformer?: (payload: T) => TransformerResult;
|
|
386
375
|
}
|
|
387
376
|
|
|
388
377
|
export { }
|
package/dist/index.js
CHANGED
|
@@ -192,18 +192,6 @@ function createRoute(config) {
|
|
|
192
192
|
})
|
|
193
193
|
};
|
|
194
194
|
}
|
|
195
|
-
const anySymbol = Symbol("any");
|
|
196
|
-
const numberSymbol = Symbol("number");
|
|
197
|
-
const stringSymbol = Symbol("string");
|
|
198
|
-
const arraySymbol = Symbol("array");
|
|
199
|
-
const booleanSymbol = Symbol("boolean");
|
|
200
|
-
const parameters = {
|
|
201
|
-
any: anySymbol,
|
|
202
|
-
number: numberSymbol,
|
|
203
|
-
string: stringSymbol,
|
|
204
|
-
array: arraySymbol,
|
|
205
|
-
boolean: booleanSymbol
|
|
206
|
-
};
|
|
207
195
|
function isForRouteActive(forRoutes, activeRoutes) {
|
|
208
196
|
for (const route of forRoutes) {
|
|
209
197
|
if (activeRoutes.includes(route)) {
|
|
@@ -212,121 +200,6 @@ function isForRouteActive(forRoutes, activeRoutes) {
|
|
|
212
200
|
}
|
|
213
201
|
return false;
|
|
214
202
|
}
|
|
215
|
-
function isHaveValidParams(query, neededParameters) {
|
|
216
|
-
for (const key in neededParameters) {
|
|
217
|
-
const parameterType = neededParameters[key];
|
|
218
|
-
if (Array.isArray(parameterType) && (!query[key] || JSON.stringify(parameterType) !== query[key])) {
|
|
219
|
-
return false;
|
|
220
|
-
}
|
|
221
|
-
switch (typeof parameterType) {
|
|
222
|
-
case "number": {
|
|
223
|
-
if (!query[key] || parameterType.toString() !== query[key]) {
|
|
224
|
-
return false;
|
|
225
|
-
}
|
|
226
|
-
break;
|
|
227
|
-
}
|
|
228
|
-
case "object": {
|
|
229
|
-
if (!query[key] || JSON.stringify(parameterType) !== query[key]) {
|
|
230
|
-
return false;
|
|
231
|
-
}
|
|
232
|
-
break;
|
|
233
|
-
}
|
|
234
|
-
case "string": {
|
|
235
|
-
if (!query[key] || parameterType !== query[key]) {
|
|
236
|
-
return false;
|
|
237
|
-
}
|
|
238
|
-
break;
|
|
239
|
-
}
|
|
240
|
-
case "boolean": {
|
|
241
|
-
if (!query[key] || !["0", "1", "false", "true"].includes(query[key])) {
|
|
242
|
-
return false;
|
|
243
|
-
}
|
|
244
|
-
break;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
switch (parameterType) {
|
|
248
|
-
case parameters.any: {
|
|
249
|
-
if (!query[key]) {
|
|
250
|
-
return false;
|
|
251
|
-
}
|
|
252
|
-
break;
|
|
253
|
-
}
|
|
254
|
-
case parameters.string: {
|
|
255
|
-
if (!query[key] || Array.isArray(query[key])) {
|
|
256
|
-
return false;
|
|
257
|
-
}
|
|
258
|
-
break;
|
|
259
|
-
}
|
|
260
|
-
case parameters.array: {
|
|
261
|
-
if (!query[key] || !Array.isArray(query[key])) {
|
|
262
|
-
return false;
|
|
263
|
-
}
|
|
264
|
-
break;
|
|
265
|
-
}
|
|
266
|
-
case parameters.number: {
|
|
267
|
-
if (!query[key] || Array.isArray(query[key]) || isNaN(parseInt(query[key])) && isNaN(parseFloat(query[key]))) {
|
|
268
|
-
return false;
|
|
269
|
-
}
|
|
270
|
-
break;
|
|
271
|
-
}
|
|
272
|
-
case parameters.boolean: {
|
|
273
|
-
if (!query[key] || Array.isArray(query[key]) || !["0", "1", "false", "true"].includes(query[key])) {
|
|
274
|
-
return false;
|
|
275
|
-
}
|
|
276
|
-
break;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
return true;
|
|
281
|
-
}
|
|
282
|
-
function transformParams(query, neededParameters) {
|
|
283
|
-
const result = {};
|
|
284
|
-
for (const key in neededParameters) {
|
|
285
|
-
const parameterType = neededParameters[key];
|
|
286
|
-
const data = query[key];
|
|
287
|
-
if (Array.isArray(parameterType)) {
|
|
288
|
-
const arrayData = query[key];
|
|
289
|
-
result[key] = arrayData;
|
|
290
|
-
continue;
|
|
291
|
-
}
|
|
292
|
-
switch (typeof parameterType) {
|
|
293
|
-
case "number": {
|
|
294
|
-
result[key] = isNaN(parseInt(data)) ? parseFloat(data) : parseInt(data);
|
|
295
|
-
break;
|
|
296
|
-
}
|
|
297
|
-
case "object": {
|
|
298
|
-
result[key] = JSON.parse(data);
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
case "string": {
|
|
302
|
-
result[key] = data;
|
|
303
|
-
}
|
|
304
|
-
case "boolean": {
|
|
305
|
-
result[key] = data === "1" || data === "true";
|
|
306
|
-
break;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
switch (parameterType) {
|
|
310
|
-
case parameters.any:
|
|
311
|
-
case parameters.string:
|
|
312
|
-
case parameters.array: {
|
|
313
|
-
result[key] = query[key];
|
|
314
|
-
break;
|
|
315
|
-
}
|
|
316
|
-
case parameters.number: {
|
|
317
|
-
const data2 = query[key];
|
|
318
|
-
result[key] = isNaN(parseInt(data2)) ? parseFloat(data2) : parseInt(data2);
|
|
319
|
-
break;
|
|
320
|
-
}
|
|
321
|
-
case parameters.boolean: {
|
|
322
|
-
const data2 = query[key];
|
|
323
|
-
result[key] = data2 === "1" || data2 === "true";
|
|
324
|
-
break;
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
return result;
|
|
329
|
-
}
|
|
330
203
|
function trackQueryControlsFactory(_ref) {
|
|
331
204
|
let {
|
|
332
205
|
$query,
|
|
@@ -335,7 +208,7 @@ function trackQueryControlsFactory(_ref) {
|
|
|
335
208
|
return trackQueryFactory({
|
|
336
209
|
$activeRoutes: createStore([], {
|
|
337
210
|
name: "$activeRoutes",
|
|
338
|
-
sid: "
|
|
211
|
+
sid: "ni3bf8"
|
|
339
212
|
}),
|
|
340
213
|
$query,
|
|
341
214
|
navigate
|
|
@@ -349,28 +222,32 @@ function trackQueryFactory(_ref2) {
|
|
|
349
222
|
} = _ref2;
|
|
350
223
|
return (config) => {
|
|
351
224
|
const {
|
|
352
|
-
parameters
|
|
225
|
+
parameters,
|
|
353
226
|
forRoutes
|
|
354
227
|
} = config;
|
|
355
228
|
const $entered = createStore(false, {
|
|
356
229
|
name: "$entered",
|
|
357
|
-
sid: "-
|
|
230
|
+
sid: "-i5493b"
|
|
358
231
|
});
|
|
359
232
|
const entered = createEvent({
|
|
360
233
|
name: "entered",
|
|
361
|
-
sid: "
|
|
234
|
+
sid: "9i8bun"
|
|
362
235
|
});
|
|
363
236
|
const exited = createEvent({
|
|
364
237
|
name: "exited",
|
|
365
|
-
sid: "-
|
|
238
|
+
sid: "-p2hcsy"
|
|
239
|
+
});
|
|
240
|
+
const enter = createEvent({
|
|
241
|
+
name: "enter",
|
|
242
|
+
sid: "30cmky"
|
|
366
243
|
});
|
|
367
244
|
const exit = createEvent({
|
|
368
245
|
name: "exit",
|
|
369
|
-
sid: "
|
|
246
|
+
sid: "-2657ec"
|
|
370
247
|
});
|
|
371
248
|
const changeEntered = createEvent({
|
|
372
249
|
name: "changeEntered",
|
|
373
|
-
sid: "
|
|
250
|
+
sid: "-5jm7r1"
|
|
374
251
|
});
|
|
375
252
|
sample({
|
|
376
253
|
and: [{
|
|
@@ -378,7 +255,7 @@ function trackQueryFactory(_ref2) {
|
|
|
378
255
|
target: $entered
|
|
379
256
|
}],
|
|
380
257
|
or: {
|
|
381
|
-
sid: "-
|
|
258
|
+
sid: "-j6nk9y"
|
|
382
259
|
}
|
|
383
260
|
});
|
|
384
261
|
sample({
|
|
@@ -392,18 +269,18 @@ function trackQueryFactory(_ref2) {
|
|
|
392
269
|
activeRoutes,
|
|
393
270
|
query
|
|
394
271
|
} = _ref3;
|
|
395
|
-
return (!forRoutes || isForRouteActive(forRoutes, activeRoutes)) &&
|
|
272
|
+
return (!forRoutes || isForRouteActive(forRoutes, activeRoutes)) && parameters.safeParse(query).success;
|
|
396
273
|
},
|
|
397
274
|
fn: (_ref4) => {
|
|
398
275
|
let {
|
|
399
276
|
query
|
|
400
277
|
} = _ref4;
|
|
401
|
-
return
|
|
278
|
+
return parameters.safeParse(query).data;
|
|
402
279
|
},
|
|
403
280
|
target: [entered, changeEntered.prepend(() => true)]
|
|
404
281
|
}],
|
|
405
282
|
or: {
|
|
406
|
-
sid: "-
|
|
283
|
+
sid: "-iscwuk"
|
|
407
284
|
}
|
|
408
285
|
});
|
|
409
286
|
sample({
|
|
@@ -419,12 +296,30 @@ function trackQueryFactory(_ref2) {
|
|
|
419
296
|
query,
|
|
420
297
|
entered: entered2
|
|
421
298
|
} = _ref5;
|
|
422
|
-
return entered2 && !((!forRoutes || isForRouteActive(forRoutes, activeRoutes)) &&
|
|
299
|
+
return entered2 && !((!forRoutes || isForRouteActive(forRoutes, activeRoutes)) && parameters.safeParse(query).success);
|
|
423
300
|
},
|
|
424
301
|
target: [exited.prepend(() => void 0), changeEntered.prepend(() => false)]
|
|
425
302
|
}],
|
|
426
303
|
or: {
|
|
427
|
-
sid: "-
|
|
304
|
+
sid: "-ibv31q"
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
sample({
|
|
308
|
+
and: [{
|
|
309
|
+
clock: enter,
|
|
310
|
+
source: $query,
|
|
311
|
+
fn: (query, payload) => {
|
|
312
|
+
return {
|
|
313
|
+
query: {
|
|
314
|
+
...query,
|
|
315
|
+
...payload
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
},
|
|
319
|
+
target: navigate
|
|
320
|
+
}],
|
|
321
|
+
or: {
|
|
322
|
+
sid: "-hsmaa3"
|
|
428
323
|
}
|
|
429
324
|
});
|
|
430
325
|
sample({
|
|
@@ -450,10 +345,11 @@ function trackQueryFactory(_ref2) {
|
|
|
450
345
|
target: navigate
|
|
451
346
|
}],
|
|
452
347
|
or: {
|
|
453
|
-
sid: "-
|
|
348
|
+
sid: "-whgzm0"
|
|
454
349
|
}
|
|
455
350
|
});
|
|
456
351
|
return {
|
|
352
|
+
enter,
|
|
457
353
|
entered,
|
|
458
354
|
exited,
|
|
459
355
|
exit
|
|
@@ -642,8 +538,8 @@ function compile(path) {
|
|
|
642
538
|
if (!parsedToken) {
|
|
643
539
|
continue;
|
|
644
540
|
}
|
|
645
|
-
const
|
|
646
|
-
if (!
|
|
541
|
+
const parameters = getTokenParameters(parsedToken.match(regexp));
|
|
542
|
+
if (!parameters) {
|
|
647
543
|
tokens.push({
|
|
648
544
|
type: "const",
|
|
649
545
|
name: parsedToken,
|
|
@@ -656,7 +552,7 @@ function compile(path) {
|
|
|
656
552
|
genericProps,
|
|
657
553
|
modificator,
|
|
658
554
|
name
|
|
659
|
-
} =
|
|
555
|
+
} = parameters;
|
|
660
556
|
if (!name) {
|
|
661
557
|
throw new Error(`Invalid path: "${path}". Name for argument must be provided`);
|
|
662
558
|
}
|
|
@@ -1014,58 +910,68 @@ function createRouter(config) {
|
|
|
1014
910
|
};
|
|
1015
911
|
}
|
|
1016
912
|
function createVirtualRoute() {
|
|
1017
|
-
let
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
913
|
+
let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
914
|
+
const {
|
|
915
|
+
beforeOpen,
|
|
916
|
+
$isPending = createStore(false, {
|
|
917
|
+
name: "$isPending",
|
|
918
|
+
sid: "-f18bwu"
|
|
919
|
+
}),
|
|
920
|
+
transformer = (payload) => payload ?? null
|
|
921
|
+
} = options;
|
|
1025
922
|
const $params = createStore(null, {
|
|
1026
923
|
name: "$params",
|
|
1027
|
-
sid: "
|
|
924
|
+
sid: "v2ropa"
|
|
1028
925
|
});
|
|
1029
926
|
const $isOpened = createStore(false, {
|
|
1030
927
|
name: "$isOpened",
|
|
1031
|
-
sid: "
|
|
928
|
+
sid: "mzzqqr"
|
|
1032
929
|
});
|
|
1033
|
-
const $isPending = pending;
|
|
1034
930
|
const open = createEvent({
|
|
1035
931
|
name: "open",
|
|
1036
|
-
sid: "
|
|
932
|
+
sid: "f33vnd"
|
|
1037
933
|
});
|
|
1038
934
|
const opened = createEvent({
|
|
1039
935
|
name: "opened",
|
|
1040
|
-
sid: "-
|
|
936
|
+
sid: "-efpvez"
|
|
1041
937
|
});
|
|
1042
938
|
const openedOnServer = createEvent({
|
|
1043
939
|
name: "openedOnServer",
|
|
1044
|
-
sid: "
|
|
940
|
+
sid: "o8st20"
|
|
1045
941
|
});
|
|
1046
942
|
const openedOnClient = createEvent({
|
|
1047
943
|
name: "openedOnClient",
|
|
1048
|
-
sid: "
|
|
944
|
+
sid: "xaagqn"
|
|
1049
945
|
});
|
|
1050
946
|
const close = createEvent({
|
|
1051
947
|
name: "close",
|
|
1052
|
-
sid: "
|
|
948
|
+
sid: "-20upkw"
|
|
1053
949
|
});
|
|
1054
950
|
const closed = createEvent({
|
|
1055
951
|
name: "closed",
|
|
1056
|
-
sid: "
|
|
952
|
+
sid: "avevxu"
|
|
1057
953
|
});
|
|
1058
954
|
const cancelled = createEvent({
|
|
1059
955
|
name: "cancelled",
|
|
1060
|
-
sid: "
|
|
956
|
+
sid: "808tq5"
|
|
1061
957
|
});
|
|
1062
958
|
sample({
|
|
1063
959
|
and: [{
|
|
1064
960
|
clock: open,
|
|
1065
|
-
target: opened
|
|
961
|
+
target: [opened]
|
|
962
|
+
}],
|
|
963
|
+
or: {
|
|
964
|
+
sid: "p3r2ad"
|
|
965
|
+
}
|
|
966
|
+
});
|
|
967
|
+
sample({
|
|
968
|
+
and: [{
|
|
969
|
+
clock: open,
|
|
970
|
+
fn: transformer,
|
|
971
|
+
target: $params
|
|
1066
972
|
}],
|
|
1067
973
|
or: {
|
|
1068
|
-
sid: "
|
|
974
|
+
sid: "p6i196"
|
|
1069
975
|
}
|
|
1070
976
|
});
|
|
1071
977
|
split({
|
|
@@ -1078,7 +984,7 @@ function createVirtualRoute() {
|
|
|
1078
984
|
}
|
|
1079
985
|
}],
|
|
1080
986
|
or: {
|
|
1081
|
-
sid: "
|
|
987
|
+
sid: "plch9x"
|
|
1082
988
|
}
|
|
1083
989
|
});
|
|
1084
990
|
sample({
|
|
@@ -1087,7 +993,7 @@ function createVirtualRoute() {
|
|
|
1087
993
|
target: closed
|
|
1088
994
|
}],
|
|
1089
995
|
or: {
|
|
1090
|
-
sid: "
|
|
996
|
+
sid: "q1ub2r"
|
|
1091
997
|
}
|
|
1092
998
|
});
|
|
1093
999
|
sample({
|
|
@@ -1096,7 +1002,7 @@ function createVirtualRoute() {
|
|
|
1096
1002
|
target: $isOpened
|
|
1097
1003
|
}],
|
|
1098
1004
|
or: {
|
|
1099
|
-
sid: "
|
|
1005
|
+
sid: "q4la1k"
|
|
1100
1006
|
}
|
|
1101
1007
|
});
|
|
1102
1008
|
return {
|
|
@@ -1110,13 +1016,14 @@ function createVirtualRoute() {
|
|
|
1110
1016
|
close,
|
|
1111
1017
|
closed,
|
|
1112
1018
|
cancelled,
|
|
1113
|
-
|
|
1114
|
-
|
|
1019
|
+
path: "",
|
|
1020
|
+
beforeOpen,
|
|
1115
1021
|
"@@unitShape": () => ({
|
|
1116
1022
|
params: $params,
|
|
1117
1023
|
isOpened: $isOpened,
|
|
1118
1024
|
isPending: $isPending,
|
|
1119
|
-
onOpen: open
|
|
1025
|
+
onOpen: open,
|
|
1026
|
+
onClose: close
|
|
1120
1027
|
})
|
|
1121
1028
|
};
|
|
1122
1029
|
}
|
|
@@ -1130,7 +1037,7 @@ function chainRoute(props) {
|
|
|
1130
1037
|
let asyncImport;
|
|
1131
1038
|
const waitForAsyncBundleFx = createEffect(() => asyncImport == null ? void 0 : asyncImport(), {
|
|
1132
1039
|
name: "waitForAsyncBundleFx",
|
|
1133
|
-
sid: "
|
|
1040
|
+
sid: "qdkcuo"
|
|
1134
1041
|
});
|
|
1135
1042
|
const openFx = createEffect(async (payload) => {
|
|
1136
1043
|
await waitForAsyncBundleFx();
|
|
@@ -1139,47 +1046,46 @@ function chainRoute(props) {
|
|
|
1139
1046
|
}
|
|
1140
1047
|
}, {
|
|
1141
1048
|
name: "openFx",
|
|
1142
|
-
sid: "-
|
|
1049
|
+
sid: "-fwntqy"
|
|
1050
|
+
});
|
|
1051
|
+
const transformer = (payload) => {
|
|
1052
|
+
if (!payload) {
|
|
1053
|
+
return null;
|
|
1054
|
+
}
|
|
1055
|
+
return "params" in payload ? payload.params : null;
|
|
1056
|
+
};
|
|
1057
|
+
const virtualRoute = createVirtualRoute({
|
|
1058
|
+
transformer
|
|
1143
1059
|
});
|
|
1144
|
-
const virtualRoute = createVirtualRoute(openFx.pending);
|
|
1145
1060
|
sample({
|
|
1146
1061
|
and: [{
|
|
1147
1062
|
clock: route.opened,
|
|
1148
1063
|
target: openFx
|
|
1149
1064
|
}],
|
|
1150
1065
|
or: {
|
|
1151
|
-
sid: "
|
|
1066
|
+
sid: "-s9xf6p"
|
|
1152
1067
|
}
|
|
1153
1068
|
});
|
|
1154
1069
|
sample({
|
|
1155
1070
|
and: [{
|
|
1156
1071
|
clock: route.opened,
|
|
1157
|
-
fn:
|
|
1072
|
+
fn: transformer,
|
|
1158
1073
|
target: virtualRoute.$params
|
|
1159
1074
|
}],
|
|
1160
1075
|
or: {
|
|
1161
|
-
sid: "
|
|
1076
|
+
sid: "-1u78yc"
|
|
1162
1077
|
}
|
|
1163
1078
|
});
|
|
1164
1079
|
if (openOn) {
|
|
1165
1080
|
sample({
|
|
1166
1081
|
and: [{
|
|
1167
1082
|
clock: openOn,
|
|
1168
|
-
source:
|
|
1169
|
-
|
|
1170
|
-
},
|
|
1171
|
-
fn: (_ref) => {
|
|
1172
|
-
let {
|
|
1173
|
-
params
|
|
1174
|
-
} = _ref;
|
|
1175
|
-
return {
|
|
1176
|
-
params
|
|
1177
|
-
};
|
|
1178
|
-
},
|
|
1083
|
+
source: virtualRoute.$params,
|
|
1084
|
+
fn: (params) => params,
|
|
1179
1085
|
target: virtualRoute.open
|
|
1180
1086
|
}],
|
|
1181
1087
|
or: {
|
|
1182
|
-
sid: "
|
|
1088
|
+
sid: "-1qcor3"
|
|
1183
1089
|
}
|
|
1184
1090
|
});
|
|
1185
1091
|
}
|
|
@@ -1190,7 +1096,7 @@ function chainRoute(props) {
|
|
|
1190
1096
|
target: virtualRoute.close
|
|
1191
1097
|
}],
|
|
1192
1098
|
or: {
|
|
1193
|
-
sid: "
|
|
1099
|
+
sid: "-19uuy9"
|
|
1194
1100
|
}
|
|
1195
1101
|
});
|
|
1196
1102
|
sample({
|
|
@@ -1199,7 +1105,7 @@ function chainRoute(props) {
|
|
|
1199
1105
|
target: virtualRoute.cancelled
|
|
1200
1106
|
}],
|
|
1201
1107
|
or: {
|
|
1202
|
-
sid: "
|
|
1108
|
+
sid: "-vk7iv"
|
|
1203
1109
|
}
|
|
1204
1110
|
});
|
|
1205
1111
|
}
|
|
@@ -1210,18 +1116,19 @@ function chainRoute(props) {
|
|
|
1210
1116
|
});
|
|
1211
1117
|
}
|
|
1212
1118
|
function group(routes) {
|
|
1213
|
-
const
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1119
|
+
const virtual = createVirtualRoute({
|
|
1120
|
+
$isPending: withFactory({
|
|
1121
|
+
sid: "-u1putn",
|
|
1122
|
+
fn: () => or(...routes.map((route) => route.$isPending)),
|
|
1123
|
+
name: "$isPending",
|
|
1124
|
+
method: "or"
|
|
1125
|
+
})
|
|
1218
1126
|
});
|
|
1219
|
-
const virtual = createVirtualRoute($isPending);
|
|
1220
1127
|
sample({
|
|
1221
1128
|
and: [{
|
|
1222
1129
|
clock: routes.map((route) => route.$isOpened),
|
|
1223
1130
|
filter: withFactory({
|
|
1224
|
-
sid: "
|
|
1131
|
+
sid: "76kf3k",
|
|
1225
1132
|
fn: () => or(...routes.map((route) => route.$isOpened)),
|
|
1226
1133
|
name: "filter",
|
|
1227
1134
|
method: "or"
|
|
@@ -1230,16 +1137,16 @@ function group(routes) {
|
|
|
1230
1137
|
target: virtual.open
|
|
1231
1138
|
}],
|
|
1232
1139
|
or: {
|
|
1233
|
-
sid: "-
|
|
1140
|
+
sid: "-xmoke0"
|
|
1234
1141
|
}
|
|
1235
1142
|
});
|
|
1236
1143
|
sample({
|
|
1237
1144
|
and: [{
|
|
1238
1145
|
clock: routes.map((route) => route.$isOpened),
|
|
1239
1146
|
filter: withFactory({
|
|
1240
|
-
sid: "
|
|
1147
|
+
sid: "ahvrux",
|
|
1241
1148
|
fn: () => not(withFactory({
|
|
1242
|
-
sid: "
|
|
1149
|
+
sid: "xs5yb9",
|
|
1243
1150
|
fn: () => or(...routes.map((route) => route.$isOpened)),
|
|
1244
1151
|
name: "fn",
|
|
1245
1152
|
method: "or"
|
|
@@ -1251,7 +1158,7 @@ function group(routes) {
|
|
|
1251
1158
|
target: virtual.close
|
|
1252
1159
|
}],
|
|
1253
1160
|
or: {
|
|
1254
|
-
sid: "-
|
|
1161
|
+
sid: "-x7abrw"
|
|
1255
1162
|
}
|
|
1256
1163
|
});
|
|
1257
1164
|
return virtual;
|
|
@@ -1262,6 +1169,5 @@ export {
|
|
|
1262
1169
|
createRouter,
|
|
1263
1170
|
createRouterControls,
|
|
1264
1171
|
createVirtualRoute,
|
|
1265
|
-
group
|
|
1266
|
-
parameters
|
|
1172
|
+
group
|
|
1267
1173
|
};
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"registry": "https://registry.npmjs.org/"
|
|
6
6
|
},
|
|
7
7
|
"private": false,
|
|
8
|
-
"version": "0.
|
|
8
|
+
"version": "0.11.0",
|
|
9
9
|
"description": "Router with power of effector",
|
|
10
10
|
"keywords": [
|
|
11
11
|
"effector",
|
|
@@ -49,10 +49,11 @@
|
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@types/history": "^4.7.11",
|
|
52
|
-
"query-string": "^9.1.1"
|
|
52
|
+
"query-string": "^9.1.1",
|
|
53
|
+
"zod": "^3.25.71"
|
|
53
54
|
},
|
|
54
55
|
"dependencies": {
|
|
55
|
-
"@argon-router/paths": "^0.
|
|
56
|
+
"@argon-router/paths": "^0.11.0"
|
|
56
57
|
},
|
|
57
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "0180f75dbbc73a123e706ff48961f8e57d57ce65"
|
|
58
59
|
}
|