@argon-router/core 0.9.0 → 0.10.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 +22 -0
- package/dist/index.js +90 -32
- package/package.json +3 -3
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");const r={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 n(e,a){for(const t in a){const n=a[t];if(Array.isArray(n)&&(!e[t]||JSON.stringify(n)!==e[t]))return!1;switch(typeof n){case"number":if(!e[t]||n.toString()!==e[t])return!1;break;case"object":if(!e[t]||JSON.stringify(n)!==e[t])return!1;break;case"string":if(!e[t]||n!==e[t])return!1;break;case"boolean":if(!e[t]||!["0","1","false","true"].includes(e[t]))return!1}switch(n){case r.any:if(!e[t])return!1;break;case r.string:if(!e[t]||Array.isArray(e[t]))return!1;break;case r.array:if(!e[t]||!Array.isArray(e[t]))return!1;break;case r.number:if(!e[t]||Array.isArray(e[t])||isNaN(parseInt(e[t]))&&isNaN(parseFloat(e[t])))return!1;break;case r.boolean:if(!e[t]||Array.isArray(e[t])||!["0","1","false","true"].includes(e[t]))return!1}}return!0}function s(a){let{$query:r,navigate:t}=a;return o({$activeRoutes:e.createStore([],{name:"$activeRoutes",sid:"7ol7tr"}),$query:r,navigate:t})}function o(a){let{$activeRoutes:s,$query:o,navigate:i}=a;return a=>{const{parameters:c,forRoutes:l}=a,p=e.createStore(!1,{name:"$entered",sid:"-okbvx4"}),u=e.createEvent({name:"entered",sid:"-1bbi51"}),d=e.createEvent({name:"exited",sid:"-lw34uy"}),m=e.createEvent({name:"exit",sid:"5l9ghz"}),f=e.createEvent({name:"changeEntered",sid:"en4cc0"});return e.sample({and:[{clock:f,target:p}],or:{sid:"-gssa85"}}),e.sample({and:[{source:{activeRoutes:s,query:o},filter:e=>{let{activeRoutes:a,query:r}=e;return(!l||t(l,a))&&n(r,c)},fn:e=>{let{query:a}=e;return function(e,a){const t={};for(const n in a){const s=a[n],o=e[n];if(Array.isArray(s)){const a=e[n];t[n]=a;continue}switch(typeof s){case"number":t[n]=isNaN(parseInt(o))?parseFloat(o):parseInt(o);break;case"object":t[n]=JSON.parse(o);break;case"string":t[n]=o;case"boolean":t[n]="1"===o||"true"===o}switch(s){case r.any:case r.string:case r.array:t[n]=e[n];break;case r.number:{const a=e[n];t[n]=isNaN(parseInt(a))?parseFloat(a):parseInt(a);break}case r.boolean:{const a=e[n];t[n]="1"===a||"true"===a;break}}}return t}(a,c)},target:[u,f.prepend(()=>!0)]}],or:{sid:"-gehmsr"}}),e.sample({and:[{source:{activeRoutes:s,query:o,entered:p},filter:e=>{let{activeRoutes:a,query:r,entered:s}=e;return s&&!((!l||t(l,a))&&n(r,c))},target:[d.prepend(()=>{}),f.prepend(()=>!1)]}],or:{sid:"-fxzszx"}}),e.sample({and:[{clock:m,source:o,fn:(e,a)=>{if(a&&a.ignoreParams){const r={};for(const t of a.ignoreParams)e[t]&&(r[t]=e[t]);return{query:r}}return{query:{}}},target:i}],or:{sid:"-fer08a"}}),{entered:u,exited:d,exit:m}}}function i(e){return a=>{const r=a.split("/").map(e=>e.trim()).filter(e=>""!==e);let t=null;function n(e,a){t||(t={}),t[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:t,genericProps:o,required:i}=a.payload;if(t){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>=(t.max??1/0))break}if(i.length<(t.min??0))return null;if(r.length>0&&!e[s+1])return null;n(a.name,i);break}const c=r.shift();if(i&&!c)return null;if(!c){n(a.name,void 0);continue}switch(null==o?void 0:o.type){case"number":if(isNaN(+c))return null;n(a.name,+c);break;case"union":if(!o.items.includes(c))return null;n(a.name,c);break;default:n(a.name,c)}}}}return r.length>0?null:{path:a,params:t}}}function c(e){if(!e)return null;const a=e[1];let r,t,n;for(const s of e.slice(2))s&&(s.includes("<")?r=s.replaceAll(/\s/g,"").replace("<","").replace(">",""):(s.includes("{")&&(t=s.replace("{","").replace("}","").split(",").map(e=>parseInt(e))),["*","?","+"].includes(s)&&(n=s)));return{name:a,genericProps:r,arrayProps:t,modificator:n}}function l(e){return a=>{const r=[];if(0===e.length)return"/";for(const t of e)switch(t.type){case"const":r.push(t.name);break;case"parameter":if(!a[t.name])continue;if(Array.isArray(a[t.name]))for(const e of a[t.name])r.push(e.toString());else r.push(a[t.name].toString())}return`/${r.join("/")}`}}function p(){const r=e.createStore(null,{and:{serialize:"ignore"},name:"$history",sid:"-ld7lzl"}),t=e.createStore({query:{},path:null},{name:"$locationState",sid:"-4u3w85"}),n=t.map(e=>e.query),o=t.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"}),u=e.createEvent({name:"locationUpdated",sid:"lkzldx"}),d=e.attach({and:{source:r,effect:(e,r)=>{let{path:t,query:n,replace:s}=r;if(!e)throw new Error("history not found");const o={pathname:t,search:`?${a.stringify(n)}`};s?e.replace(o):e.push(o)}},or:{name:"navigateFx",sid:"-ov1xn7"}}),m=e.createEffect(r=>{const t=e.scopeBind(u);if(t({pathname:r.location.pathname,query:{...a.parse(r.location.search)}}),!r)throw new Error;r.listen(e=>{let{location:r}=e;t({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:u,fn:e=>({path:e.pathname,query:e.query}),target:t}],or:{sid:"i3x4a"}}),e.sample({and:[{clock:c,source:o,fn:(e,a)=>({path:e,...a}),target:d}],or:{sid:"ylqx4"}}),{$history:r,$locationState:t,$query:n,$path:o,setHistory:i,navigate:c,back:l,forward:p,locationUpdated:u,trackQuery:s({$query:n,navigate:c})}}exports.chainRoute=function(a){const{route:r,beforeOpen:t,openOn:n,cancelOn:s}=a;let o;const i=e.createEffect(()=>null==o?void 0:o(),{name:"waitForAsyncBundleFx",sid:"-utsi21"}),c=e.createEffect(async e=>{await i();for(const a of[].concat(t))await a(e)},{name:"openFx",sid:"-kgdclv"}),l=function(a){const r=e.createStore(null,{name:"$params",sid:"-grvyb1"}),t=e.createStore(!1,{name:"$isOpened",sid:"-w4cbyq"}),n=a,s=e.createEvent({name:"open",sid:"8yat5e"}),o=e.createEvent({name:"opened",sid:"-rsfhnq"}),i=e.createEvent({name:"openedOnServer",sid:"m42ioq"}),c=e.createEvent({name:"openedOnClient",sid:"-bstrdb"}),l=e.createEvent({name:"close",sid:"41ihvs"}),p=e.createEvent({name:"closed",sid:"vdm6z6"}),u=e.createEvent({name:"cancelled",sid:"-r20ekt"});return e.sample({and:[{clock:s,target:o}],or:{sid:"-ukycs8"}}),e.split({and:[{source:o,match:()=>"undefined"==typeof window?"server":"client",cases:{server:i,client:c}}],or:{sid:"-u6npcu"}}),e.sample({and:[{clock:l,target:p}],or:{sid:"-tq5vk0"}}),e.sample({and:[{clock:[o.map(()=>!0),p.map(()=>!1)],target:t}],or:{sid:"-tnewl7"}}),{$params:r,$isOpened:t,$isPending:n,open:s,opened:o,openedOnClient:c,openedOnServer:i,close:l,closed:p,cancelled:u,path:null,"@@unitShape":()=>({params:r,isOpened:t,isPending:n,onOpen:s})}}(c.pending);return e.sample({and:[{clock:r.opened,target:c}],or:{sid:"102heu"}}),e.sample({and:[{clock:r.opened,fn:e=>e&&"params"in e?e.params:null,target:l.$params}],or:{sid:"12tgdn"}}),n&&e.sample({and:[{clock:n,source:{params:l.$params},fn:e=>{let{params:a}=e;return{params:a}},target:l.open}],or:{sid:"1jba87"}}),s&&(e.sample({and:[{clock:[r.closed].concat(s),target:l.close}],or:{sid:"1zt411"}}),e.sample({and:[{clock:[].concat(s),target:l.cancelled}],or:{sid:"22k2zu"}})),Object.assign(l,{internal:{setAsyncImport:e=>o=e}})},exports.createRoute=function(a){let r;const t=e.createEffect(()=>null==r?void 0:r(),{name:"waitForAsyncBundleFx",sid:"1y76ms"}),n=e.createEffect(async()=>{for(const e of a.beforeOpen??[])await e()},{name:"beforeOpenFx",sid:"-65tb76"}),s=e.createEffect(async e=>{await t(),await n();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,l=e.createEvent({name:"open",sid:"ur5fa6"}),p=e.createEvent({name:"close",sid:"-k33yie"}),u=e.createEvent({name:"opened",sid:"-nt8hns"}),d=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:l,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:d,client:m}}],or:{sid:"-zha4na"}}),e.sample({and:[{clock:[m,d],target:u}],or:{sid:"-z08i93"}}),e.sample({and:[{clock:p,target:y}],or:{sid:"-yxhjaa"}}),e.sample({and:[{clock:[u.map(()=>!0),y.map(()=>!1)],target:i}],or:{sid:"-yj6vuw"}}),{$params:o,$isOpened:i,$isPending:c,open:l,closed:y,opened:u,openedOnClient:m,openedOnServer:d,...a,internal:{navigated:f,close:p,openFx:s,setAsyncImport:e=>r=e},"@@unitShape":()=>({params:o,isPending:c,isOpened:i,onOpen:l})}},exports.createRouter=function(a){const{base:r="/",routes:t}=a,{$path:n,$query:s,back:u,forward:d,navigate:m,setHistory:f,locationUpdated:y}=p(),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 n="/"===r?t.join(""):[r,...t].join(""),{build:s,parse:o}=function(e){const a=[],r=/:(\w+)(<[\s?\w|]+>)?({\d+\,\d+})?([+*?])?/,t=e.split("/").filter(Boolean);for(let n=0;n<t.length;n++){const s=t[n];if(!s)continue;const o=c(s.match(r));if(!o){a.push({type:"const",name:s,payload:void 0});continue}const{arrayProps:i,genericProps:l,modificator:p,name:u}=o;if(!u)throw new Error(`Invalid path: "${e}". Name for argument must be provided`);const d={type:"parameter",name:u,payload:{required:!0}};switch(l&&"number"===l&&(d.payload.genericProps={type:"number"}),l&&l.includes("|")&&(d.payload.genericProps={type:"union",items:l.split("|")}),p){case"*":d.payload.arrayProps={};break;case"+":d.payload.arrayProps={min:1};break;case"?":d.payload.required=!1}i&&(d.payload.arrayProps={...d.payload.arrayProps,min:i[0],max:i[1]}),a.push(d)}return{parse:i(a),build:l(a)}}(n);return{route:e,path:n,build:s,parse:o}}),g=n.map(e=>{const a=[];if(!e)return a;for(const{route:r,parse:t}of h)t(e)&&a.push(r);return a}),v=e.attach({and:{source:{query:s,path:n},effect:async a=>{let{query:r,path:t}=a;for(const{route:n,parse:s}of h){const a=s(t),[o,i]=[e.scopeBind(n.internal.close),e.scopeBind(n.internal.navigated)];a?i({query:r,params:a.params}):o()}}},or:{name:"openRoutesByPathFx",sid:"-3zl7vq"}});for(const{route:o,build:i}of h)e.sample({and:[{clock:o.internal.openFx.doneData,filter:e=>!1!==(null==e?void 0:e.navigate),fn:e=>({path:i(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:n,$activeRoutes:g,back:u,forward:d,navigate:m,routes:t,setHistory:f,mappedRoutes:h,trackQuery:o({$activeRoutes:g,$query:s,navigate:m}),"@@unitShape":()=>({query:s,path:n,activeRoutes:g,onBack:u,onForward:d,onNavigate:m})}},exports.createRouterControls=p,exports.parameters=r;
|
|
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;
|
package/dist/index.d.ts
CHANGED
|
@@ -179,6 +179,28 @@ export declare function createRouter(config: RouterConfig): Router;
|
|
|
179
179
|
*/
|
|
180
180
|
export declare function createRouterControls(): RouterControls;
|
|
181
181
|
|
|
182
|
+
export declare function createVirtualRoute<T>(pending?: Store<boolean>): VirtualRoute<T>;
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* @description Create virtual route which opens when some passed routes is opened. Closes if all passed routes are closed.
|
|
186
|
+
* @link https://movpushmov.dev/argon-router/core/group.html
|
|
187
|
+
* @returns VirtualRoute
|
|
188
|
+
* @example ```ts
|
|
189
|
+
* import { group, createRoute } from '@argon-router/core';
|
|
190
|
+
* import { createEvent, createEffect } from 'effector';
|
|
191
|
+
*
|
|
192
|
+
* const signInRoute = createRoute({ path: '/auth/sign-in' });
|
|
193
|
+
* const signUpRoute = createRoute({ path: '/auth/sign-up' });
|
|
194
|
+
* const authorizationRoute = group([signInRoute, signUpRoute]);
|
|
195
|
+
*
|
|
196
|
+
* signInRoute.open(); // authorizationRoute.$isOpened —> true
|
|
197
|
+
* signUpRoute.open(); // authorizationRoute.$isOpened —> true
|
|
198
|
+
* signInRoute.close(); // authorizationRoute.$isOpened —> true
|
|
199
|
+
* signUpRoute.close(); // authorizationRoute.$isOpened —> false
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
202
|
+
export declare function group(routes: Route<any>[]): VirtualRoute<void>;
|
|
203
|
+
|
|
182
204
|
declare type LocationState = {
|
|
183
205
|
path: string;
|
|
184
206
|
query: Query;
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { createEffect, createStore, createEvent, sample, split, attach, scopeBind } from "effector";
|
|
1
|
+
import { createEffect, createStore, createEvent, sample, split, attach, scopeBind, withFactory } from "effector";
|
|
2
2
|
import queryString from "query-string";
|
|
3
|
+
import { or, not } from "patronum";
|
|
3
4
|
function createRoute(config) {
|
|
4
5
|
let asyncImport;
|
|
5
6
|
const waitForAsyncBundleFx = createEffect(() => asyncImport == null ? void 0 : asyncImport(), {
|
|
@@ -302,7 +303,7 @@ function trackQueryControlsFactory(_ref) {
|
|
|
302
303
|
return trackQueryFactory({
|
|
303
304
|
$activeRoutes: createStore([], {
|
|
304
305
|
name: "$activeRoutes",
|
|
305
|
-
sid: "
|
|
306
|
+
sid: "85ms46"
|
|
306
307
|
}),
|
|
307
308
|
$query,
|
|
308
309
|
navigate
|
|
@@ -321,23 +322,23 @@ function trackQueryFactory(_ref2) {
|
|
|
321
322
|
} = config;
|
|
322
323
|
const $entered = createStore(false, {
|
|
323
324
|
name: "$entered",
|
|
324
|
-
sid: "-
|
|
325
|
+
sid: "-mo5ecc"
|
|
325
326
|
});
|
|
326
327
|
const entered = createEvent({
|
|
327
328
|
name: "entered",
|
|
328
|
-
sid: "
|
|
329
|
+
sid: "kuzfr"
|
|
329
330
|
});
|
|
330
331
|
const exited = createEvent({
|
|
331
332
|
name: "exited",
|
|
332
|
-
sid: "-
|
|
333
|
+
sid: "-jzwna6"
|
|
333
334
|
});
|
|
334
335
|
const exit = createEvent({
|
|
335
336
|
name: "exit",
|
|
336
|
-
sid: "
|
|
337
|
+
sid: "7hfy2r"
|
|
337
338
|
});
|
|
338
339
|
const changeEntered = createEvent({
|
|
339
340
|
name: "changeEntered",
|
|
340
|
-
sid: "
|
|
341
|
+
sid: "qh8w6v"
|
|
341
342
|
});
|
|
342
343
|
sample({
|
|
343
344
|
and: [{
|
|
@@ -345,7 +346,7 @@ function trackQueryFactory(_ref2) {
|
|
|
345
346
|
target: $entered
|
|
346
347
|
}],
|
|
347
348
|
or: {
|
|
348
|
-
sid: "-
|
|
349
|
+
sid: "-gf1fe4"
|
|
349
350
|
}
|
|
350
351
|
});
|
|
351
352
|
sample({
|
|
@@ -370,7 +371,7 @@ function trackQueryFactory(_ref2) {
|
|
|
370
371
|
target: [entered, changeEntered.prepend(() => true)]
|
|
371
372
|
}],
|
|
372
373
|
or: {
|
|
373
|
-
sid: "-
|
|
374
|
+
sid: "-gcagfb"
|
|
374
375
|
}
|
|
375
376
|
});
|
|
376
377
|
sample({
|
|
@@ -391,7 +392,7 @@ function trackQueryFactory(_ref2) {
|
|
|
391
392
|
target: [exited.prepend(() => void 0), changeEntered.prepend(() => false)]
|
|
392
393
|
}],
|
|
393
394
|
or: {
|
|
394
|
-
sid: "-
|
|
395
|
+
sid: "-fvsmmh"
|
|
395
396
|
}
|
|
396
397
|
});
|
|
397
398
|
sample({
|
|
@@ -417,7 +418,7 @@ function trackQueryFactory(_ref2) {
|
|
|
417
418
|
target: navigate
|
|
418
419
|
}],
|
|
419
420
|
or: {
|
|
420
|
-
sid: "-
|
|
421
|
+
sid: "-f105e9"
|
|
421
422
|
}
|
|
422
423
|
});
|
|
423
424
|
return {
|
|
@@ -980,43 +981,51 @@ function createRouter(config) {
|
|
|
980
981
|
})
|
|
981
982
|
};
|
|
982
983
|
}
|
|
983
|
-
function createVirtualRoute(
|
|
984
|
+
function createVirtualRoute() {
|
|
985
|
+
let pending = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : createStore(false, {
|
|
986
|
+
and: {
|
|
987
|
+
name: "pending",
|
|
988
|
+
sid: "r89aiv"
|
|
989
|
+
},
|
|
990
|
+
name: "pending",
|
|
991
|
+
sid: "r89aiv"
|
|
992
|
+
});
|
|
984
993
|
const $params = createStore(null, {
|
|
985
994
|
name: "$params",
|
|
986
|
-
sid: "-
|
|
995
|
+
sid: "-ftspin"
|
|
987
996
|
});
|
|
988
997
|
const $isOpened = createStore(false, {
|
|
989
998
|
name: "$isOpened",
|
|
990
|
-
sid: "-
|
|
999
|
+
sid: "-v6936c"
|
|
991
1000
|
});
|
|
992
1001
|
const $isPending = pending;
|
|
993
1002
|
const open = createEvent({
|
|
994
1003
|
name: "open",
|
|
995
|
-
sid: "
|
|
1004
|
+
sid: "juc47v"
|
|
996
1005
|
});
|
|
997
1006
|
const opened = createEvent({
|
|
998
1007
|
name: "opened",
|
|
999
|
-
sid: "-
|
|
1008
|
+
sid: "-quc8vc"
|
|
1000
1009
|
});
|
|
1001
1010
|
const openedOnServer = createEvent({
|
|
1002
1011
|
name: "openedOnServer",
|
|
1003
|
-
sid: "
|
|
1012
|
+
sid: "n25rh4"
|
|
1004
1013
|
});
|
|
1005
1014
|
const openedOnClient = createEvent({
|
|
1006
1015
|
name: "openedOnClient",
|
|
1007
|
-
sid: "-
|
|
1016
|
+
sid: "-auqikx"
|
|
1008
1017
|
});
|
|
1009
1018
|
const close = createEvent({
|
|
1010
1019
|
name: "close",
|
|
1011
|
-
sid: "
|
|
1020
|
+
sid: "4zlqo6"
|
|
1012
1021
|
});
|
|
1013
1022
|
const closed = createEvent({
|
|
1014
1023
|
name: "closed",
|
|
1015
|
-
sid: "
|
|
1024
|
+
sid: "wbpfrk"
|
|
1016
1025
|
});
|
|
1017
1026
|
const cancelled = createEvent({
|
|
1018
1027
|
name: "cancelled",
|
|
1019
|
-
sid: "-
|
|
1028
|
+
sid: "-q3x5sf"
|
|
1020
1029
|
});
|
|
1021
1030
|
sample({
|
|
1022
1031
|
and: [{
|
|
@@ -1024,7 +1033,7 @@ function createVirtualRoute(pending) {
|
|
|
1024
1033
|
target: opened
|
|
1025
1034
|
}],
|
|
1026
1035
|
or: {
|
|
1027
|
-
sid: "-
|
|
1036
|
+
sid: "-u8b34x"
|
|
1028
1037
|
}
|
|
1029
1038
|
});
|
|
1030
1039
|
split({
|
|
@@ -1037,7 +1046,7 @@ function createVirtualRoute(pending) {
|
|
|
1037
1046
|
}
|
|
1038
1047
|
}],
|
|
1039
1048
|
or: {
|
|
1040
|
-
sid: "-
|
|
1049
|
+
sid: "-u5k464"
|
|
1041
1050
|
}
|
|
1042
1051
|
});
|
|
1043
1052
|
sample({
|
|
@@ -1046,7 +1055,7 @@ function createVirtualRoute(pending) {
|
|
|
1046
1055
|
target: closed
|
|
1047
1056
|
}],
|
|
1048
1057
|
or: {
|
|
1049
|
-
sid: "-
|
|
1058
|
+
sid: "-tp2ada"
|
|
1050
1059
|
}
|
|
1051
1060
|
});
|
|
1052
1061
|
sample({
|
|
@@ -1055,7 +1064,7 @@ function createVirtualRoute(pending) {
|
|
|
1055
1064
|
target: $isOpened
|
|
1056
1065
|
}],
|
|
1057
1066
|
or: {
|
|
1058
|
-
sid: "-
|
|
1067
|
+
sid: "-tarmxw"
|
|
1059
1068
|
}
|
|
1060
1069
|
});
|
|
1061
1070
|
return {
|
|
@@ -1089,7 +1098,7 @@ function chainRoute(props) {
|
|
|
1089
1098
|
let asyncImport;
|
|
1090
1099
|
const waitForAsyncBundleFx = createEffect(() => asyncImport == null ? void 0 : asyncImport(), {
|
|
1091
1100
|
name: "waitForAsyncBundleFx",
|
|
1092
|
-
sid: "-
|
|
1101
|
+
sid: "-tvp99n"
|
|
1093
1102
|
});
|
|
1094
1103
|
const openFx = createEffect(async (payload) => {
|
|
1095
1104
|
await waitForAsyncBundleFx();
|
|
@@ -1098,7 +1107,7 @@ function chainRoute(props) {
|
|
|
1098
1107
|
}
|
|
1099
1108
|
}, {
|
|
1100
1109
|
name: "openFx",
|
|
1101
|
-
sid: "-
|
|
1110
|
+
sid: "-9kc1je"
|
|
1102
1111
|
});
|
|
1103
1112
|
const virtualRoute = createVirtualRoute(openFx.pending);
|
|
1104
1113
|
sample({
|
|
@@ -1107,7 +1116,7 @@ function chainRoute(props) {
|
|
|
1107
1116
|
target: openFx
|
|
1108
1117
|
}],
|
|
1109
1118
|
or: {
|
|
1110
|
-
sid: "
|
|
1119
|
+
sid: "1162lk"
|
|
1111
1120
|
}
|
|
1112
1121
|
});
|
|
1113
1122
|
sample({
|
|
@@ -1117,7 +1126,7 @@ function chainRoute(props) {
|
|
|
1117
1126
|
target: virtualRoute.$params
|
|
1118
1127
|
}],
|
|
1119
1128
|
or: {
|
|
1120
|
-
sid: "
|
|
1129
|
+
sid: "13x1kd"
|
|
1121
1130
|
}
|
|
1122
1131
|
});
|
|
1123
1132
|
if (openOn) {
|
|
@@ -1138,7 +1147,7 @@ function chainRoute(props) {
|
|
|
1138
1147
|
target: virtualRoute.open
|
|
1139
1148
|
}],
|
|
1140
1149
|
or: {
|
|
1141
|
-
sid: "
|
|
1150
|
+
sid: "1kevex"
|
|
1142
1151
|
}
|
|
1143
1152
|
});
|
|
1144
1153
|
}
|
|
@@ -1149,7 +1158,7 @@ function chainRoute(props) {
|
|
|
1149
1158
|
target: virtualRoute.close
|
|
1150
1159
|
}],
|
|
1151
1160
|
or: {
|
|
1152
|
-
sid: "
|
|
1161
|
+
sid: "20wp7r"
|
|
1153
1162
|
}
|
|
1154
1163
|
});
|
|
1155
1164
|
sample({
|
|
@@ -1158,7 +1167,7 @@ function chainRoute(props) {
|
|
|
1158
1167
|
target: virtualRoute.cancelled
|
|
1159
1168
|
}],
|
|
1160
1169
|
or: {
|
|
1161
|
-
sid: "
|
|
1170
|
+
sid: "2f7cn5"
|
|
1162
1171
|
}
|
|
1163
1172
|
});
|
|
1164
1173
|
}
|
|
@@ -1168,10 +1177,59 @@ function chainRoute(props) {
|
|
|
1168
1177
|
}
|
|
1169
1178
|
});
|
|
1170
1179
|
}
|
|
1180
|
+
function group(routes) {
|
|
1181
|
+
const $isPending = withFactory({
|
|
1182
|
+
sid: "-uirglg",
|
|
1183
|
+
fn: () => or(...routes.map((route) => route.$isPending)),
|
|
1184
|
+
name: "$isPending",
|
|
1185
|
+
method: "or"
|
|
1186
|
+
});
|
|
1187
|
+
const virtual = createVirtualRoute($isPending);
|
|
1188
|
+
sample({
|
|
1189
|
+
and: [{
|
|
1190
|
+
clock: routes.map((route) => route.$isOpened),
|
|
1191
|
+
filter: withFactory({
|
|
1192
|
+
sid: "6pispd",
|
|
1193
|
+
fn: () => or(...routes.map((route) => route.$isOpened)),
|
|
1194
|
+
name: "filter",
|
|
1195
|
+
method: "or"
|
|
1196
|
+
}),
|
|
1197
|
+
fn: () => void 0,
|
|
1198
|
+
target: virtual.open
|
|
1199
|
+
}],
|
|
1200
|
+
or: {
|
|
1201
|
+
sid: "-xn8czd"
|
|
1202
|
+
}
|
|
1203
|
+
});
|
|
1204
|
+
sample({
|
|
1205
|
+
and: [{
|
|
1206
|
+
clock: routes.map((route) => route.$isOpened),
|
|
1207
|
+
filter: withFactory({
|
|
1208
|
+
sid: "a0u5gq",
|
|
1209
|
+
fn: () => not(withFactory({
|
|
1210
|
+
sid: "xb4bx2",
|
|
1211
|
+
fn: () => or(...routes.map((route) => route.$isOpened)),
|
|
1212
|
+
name: "fn",
|
|
1213
|
+
method: "or"
|
|
1214
|
+
})),
|
|
1215
|
+
name: "filter",
|
|
1216
|
+
method: "not"
|
|
1217
|
+
}),
|
|
1218
|
+
fn: () => void 0,
|
|
1219
|
+
target: virtual.close
|
|
1220
|
+
}],
|
|
1221
|
+
or: {
|
|
1222
|
+
sid: "-x7u4d9"
|
|
1223
|
+
}
|
|
1224
|
+
});
|
|
1225
|
+
return virtual;
|
|
1226
|
+
}
|
|
1171
1227
|
export {
|
|
1172
1228
|
chainRoute,
|
|
1173
1229
|
createRoute,
|
|
1174
1230
|
createRouter,
|
|
1175
1231
|
createRouterControls,
|
|
1232
|
+
createVirtualRoute,
|
|
1233
|
+
group,
|
|
1176
1234
|
parameters
|
|
1177
1235
|
};
|
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.10.0",
|
|
9
9
|
"description": "Router with power of effector",
|
|
10
10
|
"keywords": [
|
|
11
11
|
"effector",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"query-string": "^9.1.1"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@argon-router/paths": "^0.
|
|
55
|
+
"@argon-router/paths": "^0.10.0"
|
|
56
56
|
},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "7f8d946c9b6d11a4a828bdf2bafcf012970aa4d7"
|
|
58
58
|
}
|