@argon-router/core 0.10.0 → 0.10.1

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 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:p}=a,l=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:l}],or:{sid:"-gf1fe4"}}),e.sample({and:[{source:{activeRoutes:r,query:o},filter:e=>{let{activeRoutes:a,query:r}=e;return(!p||t(p,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:l},filter:e=>{let{activeRoutes:a,query:r,entered:n}=e;return n&&!((!p||t(p,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 p(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 l(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"}),p=e.createEvent({name:"back",sid:"bxy8rt"}),l=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:p,forward:l,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"}),p=e.createEvent({name:"close",sid:"4zlqo6"}),l=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:p,target:l}],or:{sid:"-tp2ada"}}),e.sample({and:[{clock:[o.map(()=>!0),l.map(()=>!1)],target:n}],or:{sid:"-tarmxw"}}),{$params:r,$isOpened:n,$isPending:t,open:s,opened:o,openedOnClient:c,openedOnServer:i,close:p,closed:l,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"}),p=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:p.$params}],or:{sid:"13x1kd"}}),t&&e.sample({and:[{clock:t,source:{params:p.$params},fn:e=>{let{params:a}=e;return{params:a}},target:p.open}],or:{sid:"1kevex"}}),s&&(e.sample({and:[{clock:[r.closed].concat(s),target:p.close}],or:{sid:"20wp7r"}}),e.sample({and:[{clock:[].concat(s),target:p.cancelled}],or:{sid:"2f7cn5"}})),Object.assign(p,{internal:{setAsyncImport:e=>o=e}})},exports.createRoute=function(a){let r;const n=e.createEffect(()=>null==r?void 0:r(),{name:"waitForAsyncBundleFx",sid:"1y76ms"}),t=e.createEffect(async()=>{for(const e of a.beforeOpen??[])await e()},{name:"beforeOpenFx",sid:"-65tb76"}),s=e.createEffect(async e=>{await n(),await t();const r=a.parent;return r&&await r.internal.openFx({...e??{params:{}},navigate:!1}),e},{name:"openFx",sid:"p3u4q7"}),o=e.createStore({},{name:"$params",sid:"-a34rm3"}),i=e.createStore(!1,{name:"$isOpened",sid:"7m6f5g"}),c=s.pending,p=e.createEvent({name:"open",sid:"ur5fa6"}),l=e.createEvent({name:"close",sid:"-k33yie"}),d=e.createEvent({name:"opened",sid:"-nt8hns"}),u=e.createEvent({name:"openedOnServer",sid:"hbjexo"}),m=e.createEvent({name:"openedOnClient",sid:"h92wzn"}),f=e.createEvent({name:"navigated",sid:"-8amrhe"}),y=e.createEvent({name:"closed",sid:"-pql6th"});e.sample({and:[{clock:p,target:s}],or:{sid:"ymah4t"}});const h={};return e.sample({and:[{clock:f,fn:e=>e&&"params"in e?{...e.params}:h,target:o}],or:{sid:"z1opqx"}}),e.split({and:[{source:f,match:()=>"undefined"==typeof window?"server":"client",cases:{server:u,client:m}}],or:{sid:"-zha4na"}}),e.sample({and:[{clock:[m,u],target:d}],or:{sid:"-z08i93"}}),e.sample({and:[{clock:l,target:y}],or:{sid:"-yxhjaa"}}),e.sample({and:[{clock:[d.map(()=>!0),y.map(()=>!1)],target:i}],or:{sid:"-yj6vuw"}}),{$params:o,$isOpened:i,$isPending:c,open:p,closed:y,opened:d,openedOnClient:m,openedOnServer:u,...a,internal:{navigated:f,close:l,openFx:s,setAsyncImport:e=>r=e},"@@unitShape":()=>({params:o,isPending:c,isOpened:i,onOpen:p})}},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(),h=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=p(s.match(r));if(!o){a.push({type:"const",name:s,payload:void 0});continue}const{arrayProps:i,genericProps:c,modificator:l,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("|")}),l){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:l(a)}}(t);return{route:e,path:t,build:s,parse:o}}),g=t.map(e=>{const a=[];if(!e)return a;for(const{route:r,parse:n}of h)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 h){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 h)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:g,back:o,forward:u,navigate:m,routes:n,setHistory:f,mappedRoutes:h,trackQuery:i({$activeRoutes:g,$query:s,navigate:m}),"@@unitShape":()=>({query:s,path:t,activeRoutes:g,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"),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;
package/dist/index.js CHANGED
@@ -1,20 +1,8 @@
1
- import { createEffect, createStore, createEvent, sample, split, attach, scopeBind, withFactory } from "effector";
1
+ import { createEffect, createStore, createEvent, attach, sample, split, scopeBind, withFactory } from "effector";
2
2
  import queryString from "query-string";
3
3
  import { or, not } from "patronum";
4
4
  function createRoute(config) {
5
5
  let asyncImport;
6
- const waitForAsyncBundleFx = createEffect(() => asyncImport == null ? void 0 : asyncImport(), {
7
- name: "waitForAsyncBundleFx",
8
- sid: "1y76ms"
9
- });
10
- const beforeOpenFx = createEffect(async () => {
11
- for (const fx of config.beforeOpen ?? []) {
12
- await fx();
13
- }
14
- }, {
15
- name: "beforeOpenFx",
16
- sid: "-65tb76"
17
- });
18
6
  const openFx = createEffect(async (payload) => {
19
7
  await waitForAsyncBundleFx();
20
8
  await beforeOpenFx();
@@ -30,58 +18,92 @@ function createRoute(config) {
30
18
  return payload;
31
19
  }, {
32
20
  name: "openFx",
33
- sid: "p3u4q7"
21
+ sid: "awhgwd"
34
22
  });
35
23
  const $params = createStore({}, {
36
24
  name: "$params",
37
- sid: "-a34rm3"
25
+ sid: "-oahffx"
38
26
  });
39
27
  const $isOpened = createStore(false, {
40
28
  name: "$isOpened",
41
- sid: "7m6f5g"
29
+ sid: "-6l68oe"
42
30
  });
43
31
  const $isPending = openFx.pending;
44
32
  const open = createEvent({
45
33
  name: "open",
46
- sid: "ur5fa6"
34
+ sid: "gjsrgc"
47
35
  });
48
36
  const close = createEvent({
49
37
  name: "close",
50
- sid: "-k33yie"
38
+ sid: "-yagmc8"
51
39
  });
52
40
  const opened = createEvent({
53
41
  name: "opened",
54
- sid: "-nt8hns"
42
+ sid: "x0iwhi"
55
43
  });
56
44
  const openedOnServer = createEvent({
57
45
  name: "openedOnServer",
58
- sid: "hbjexo"
46
+ sid: "346r3u"
59
47
  });
60
48
  const openedOnClient = createEvent({
61
49
  name: "openedOnClient",
62
- sid: "h92wzn"
50
+ sid: "31q95t"
63
51
  });
64
52
  const navigated = createEvent({
65
53
  name: "navigated",
66
- sid: "-8amrhe"
54
+ sid: "-t30l0x"
67
55
  });
68
56
  const closed = createEvent({
69
57
  name: "closed",
70
- sid: "-pql6th"
58
+ sid: "uue4ce"
59
+ });
60
+ const waitForAsyncBundleFx = createEffect(() => asyncImport == null ? void 0 : asyncImport(), {
61
+ name: "waitForAsyncBundleFx",
62
+ sid: "-nml5ho"
63
+ });
64
+ const beforeOpenFx = createEffect(async () => {
65
+ for (const fx of config.beforeOpen ?? []) {
66
+ await fx();
67
+ }
68
+ }, {
69
+ name: "beforeOpenFx",
70
+ sid: "-vqlnbm"
71
+ });
72
+ const navigatedFx = attach({
73
+ and: {
74
+ effect: openFx
75
+ },
76
+ or: {
77
+ name: "navigatedFx",
78
+ sid: "a4yadj"
79
+ }
71
80
  });
81
+ const defaultParams = {};
72
82
  sample({
73
83
  and: [{
74
84
  clock: open,
75
85
  target: openFx
76
86
  }],
77
87
  or: {
78
- sid: "ymah4t"
88
+ sid: "ynxuww"
79
89
  }
80
90
  });
81
- const defaultParams = {};
82
91
  sample({
83
92
  and: [{
84
93
  clock: navigated,
94
+ fn: (payload) => ({
95
+ navigate: false,
96
+ ...payload
97
+ }),
98
+ target: navigatedFx
99
+ }],
100
+ or: {
101
+ sid: "z28ica"
102
+ }
103
+ });
104
+ sample({
105
+ and: [{
106
+ clock: navigatedFx.doneData,
85
107
  fn: (payload) => {
86
108
  if (!payload) {
87
109
  return defaultParams;
@@ -93,12 +115,22 @@ function createRoute(config) {
93
115
  target: $params
94
116
  }],
95
117
  or: {
96
- sid: "z1opqx"
118
+ sid: "z5j9wg"
119
+ }
120
+ });
121
+ sample({
122
+ and: [{
123
+ clock: navigatedFx.failData,
124
+ fn: () => defaultParams,
125
+ target: $params
126
+ }],
127
+ or: {
128
+ sid: "-z1vw16"
97
129
  }
98
130
  });
99
131
  split({
100
132
  and: [{
101
- source: navigated,
133
+ source: navigatedFx.doneData,
102
134
  match: () => typeof window === "undefined" ? "server" : "client",
103
135
  cases: {
104
136
  server: openedOnServer,
@@ -106,7 +138,7 @@ function createRoute(config) {
106
138
  }
107
139
  }],
108
140
  or: {
109
- sid: "-zha4na"
141
+ sid: "-yyl4h0"
110
142
  }
111
143
  });
112
144
  sample({
@@ -115,7 +147,7 @@ function createRoute(config) {
115
147
  target: opened
116
148
  }],
117
149
  or: {
118
- sid: "-z08i93"
150
+ sid: "-yhji2t"
119
151
  }
120
152
  });
121
153
  sample({
@@ -124,7 +156,7 @@ function createRoute(config) {
124
156
  target: closed
125
157
  }],
126
158
  or: {
127
- sid: "-yxhjaa"
159
+ sid: "-y38unf"
128
160
  }
129
161
  });
130
162
  sample({
@@ -133,7 +165,7 @@ function createRoute(config) {
133
165
  target: $isOpened
134
166
  }],
135
167
  or: {
136
- sid: "-yj6vuw"
168
+ sid: "-y0hvom"
137
169
  }
138
170
  });
139
171
  return {
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "registry": "https://registry.npmjs.org/"
6
6
  },
7
7
  "private": false,
8
- "version": "0.10.0",
8
+ "version": "0.10.1",
9
9
  "description": "Router with power of effector",
10
10
  "keywords": [
11
11
  "effector",
@@ -54,5 +54,5 @@
54
54
  "dependencies": {
55
55
  "@argon-router/paths": "^0.10.0"
56
56
  },
57
- "gitHead": "7f8d946c9b6d11a4a828bdf2bafcf012970aa4d7"
57
+ "gitHead": "aacf3ea0642e3c732e2721bc409ed9fba3a4b8a1"
58
58
  }