@argon-router/paths 0.12.0 → 1.0.0-rc.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/LICENSE.MD ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Edward Gigolaev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -2,9 +2,6 @@
2
2
 
3
3
  Exteremly customizable paths without a headache
4
4
 
5
- > [!WARNING]
6
- > argon-router is not production ready yet and still may have bugs and unstable API. If you found bug — please report it on GitHub.
7
-
8
5
  ## Documentation
9
6
 
10
7
  For additional information, guides and api reference visit [documentation site](https://movpushmov.dev/argon-router/)
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";function e(e){return r=>{const n=r.split("/").map(e=>e.trim()).filter(e=>""!==e);let t=null;function a(e,r){t||(t={}),t[e]=r}if(0===e.length)return 0===n.length?{path:r,params:null}:null;for(let i=0;i<e.length;i++){const r=e[i];switch(r.type){case"const":if(r.name!==n.shift())return null;continue;case"parameter":{const{arrayProps:t,genericProps:o,required:s}=r.payload;if(t){const s=[];let l;for(;l=n.shift(),l;){switch(null==o?void 0:o.type){case"number":if(isNaN(+l))return null;s.push(+l);break;case"union":if(!o.items.includes(l))return null;s.push(l);break;default:s.push(l)}if(s.length>=(t.max??1/0))break}if(s.length<(t.min??0))return null;if(n.length>0&&!e[i+1])return null;a(r.name,s);break}const l=n.shift();if(s&&!l)return null;if(!l){a(r.name,void 0);continue}switch(null==o?void 0:o.type){case"number":if(isNaN(+l))return null;a(r.name,+l);break;case"union":if(!o.items.includes(l))return null;a(r.name,l);break;default:a(r.name,l)}}}}return n.length>0?null:{path:r,params:t}}}function r(e){if(!e)return null;const r=e[1];let n,t,a;for(const i of e.slice(2))i&&(i.includes("<")?n=i.replaceAll(/\s/g,"").replace("<","").replace(">",""):(i.includes("{")&&(t=i.replace("{","").replace("}","").split(",").map(e=>parseInt(e))),["*","?","+"].includes(i)&&(a=i)));return{name:r,genericProps:n,arrayProps:t,modificator:a}}function n(e){return r=>{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(!r[t.name])continue;if(Array.isArray(r[t.name]))for(const e of r[t.name])n.push(e.toString());else n.push(r[t.name].toString())}return`/${n.join("/")}`}}Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=[[/:id<.+>/g,":id"],[/:id\+/g,"*id"],[/:id\*/g,"*id"],[/:id\{.+\}/g,"*id"],[/([a-zA-Z0-9:/_\.]+)\/([\*:])id\?/g,"$1{/$2id}"],[/([\*:])id\?/g,"{$1id}"]];exports.compile=function(t){const a=[],i=/:(\w+)(<[\s?\w|]+>)?({\d+\,\d+})?([+*?])?/,o=t.split("/").filter(Boolean);for(let e=0;e<o.length;e++){const n=o[e];if(!n)continue;const s=r(n.match(i));if(!s){a.push({type:"const",name:n,payload:void 0});continue}const{arrayProps:l,genericProps:u,modificator:c,name:p}=s;if(!p)throw new Error(`Invalid path: "${t}". Name for argument must be provided`);const f={type:"parameter",name:p,payload:{required:!0}};switch(u&&"number"===u&&(f.payload.genericProps={type:"number"}),u&&u.includes("|")&&(f.payload.genericProps={type:"union",items:u.split("|")}),c){case"*":f.payload.arrayProps={};break;case"+":f.payload.arrayProps={min:1};break;case"?":f.payload.required=!1}l&&(f.payload.arrayProps={...f.payload.arrayProps,min:l[0],max:l[1]}),a.push(f)}return{parse:e(a),build:n(a)}},exports.convertPath=function(e,r){if("express"===r){let r=e;for(const[e,n]of t){r.match(e)&&(r=r.replace(e,n))}return r}};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function g(e){return r=>{const t=r.split("/").map(c=>c.trim()).filter(c=>c!=="");let n=null;function i(c,a){n||(n={}),n[c]=a}if(e.length===0)return t.length===0?{path:r,params:null}:null;for(let c=0;c<e.length;c++){const a=e[c];switch(a.type){case"const":{if(a.name!==t.shift())return null;continue}case"parameter":{const{arrayProps:m,genericProps:u,required:s}=a.payload;if(m){var o;const d=[];let f;for(;;){var l;if(f=t.shift(),!f)break;switch(u?.type){case"number":{if(isNaN(+f))return null;d.push(+f);break}case"union":{if(!u.items.includes(f))return null;d.push(f);break}default:{d.push(f);break}}if(d.length>=((l=m.max)!==null&&l!==void 0?l:1/0))break}if(d.length<((o=m.min)!==null&&o!==void 0?o:0)||t.length>0&&!e[c+1])return null;i(a.name,d);break}const p=t.shift();if(s&&!p)return null;if(!p){i(a.name,void 0);continue}switch(u?.type){case"number":{if(isNaN(+p))return null;i(a.name,+p);break}case"union":{if(!u.items.includes(p))return null;i(a.name,p);break}default:{i(a.name,p);break}}}}}return t.length>0?null:{path:r,params:n}}}function h(e){if(!e)return null;const r=e[1];let t,n,i;for(const o of e.slice(2))if(o){if(o.includes("<")){t=o.replaceAll(/\s/g,"").replace("<","").replace(">","");continue}if(o.includes("{")&&(n=o.replace("{","").replace("}","").split(",").map(l=>parseInt(l))),["*","?","+"].includes(o)){i=o;continue}}return{name:r,genericProps:t,arrayProps:n,modificator:i}}function v(e){return r=>{const t=[];if(e.length===0)return"/";for(const n of e)switch(n.type){case"const":{t.push(n.name);break}case"parameter":{if(!r[n.name])continue;if(Array.isArray(r[n.name]))for(const i of r[n.name])t.push(i.toString());else t.push(r[n.name].toString());break}}return"/".concat(t.join("/"))}}function y(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),t.push.apply(t,n)}return t}function b(e){for(var r=1;r<arguments.length;r++){var t=arguments[r]!=null?arguments[r]:{};r%2?y(Object(t),!0).forEach(function(n){P(e,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):y(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}function P(e,r,t){return(r=w(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function w(e){var r=k(e,"string");return typeof r=="symbol"?r:r+""}function k(e,r){if(typeof e!="object"||!e)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var n=t.call(e,r);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(e)}function O(e){const r=[],t=/:(\w+)(<[\s?\w|]+>)?({\d+,\d+})?([+*?])?/,n=e.split("/").filter(Boolean);for(let i=0;i<n.length;i++){const o=n[i];if(!o)continue;const l=h(o.match(t));if(!l){r.push({type:"const",name:o,payload:void 0});continue}const{arrayProps:c,genericProps:a,modificator:m,name:u}=l;if(!u)throw new Error('Invalid path: "'.concat(e,'". Name for argument must be provided'));const s={type:"parameter",name:u,payload:{required:!0}};switch(a&&a==="number"&&(s.payload.genericProps={type:"number"}),a&&a.includes("|")&&(s.payload.genericProps={type:"union",items:a.split("|")}),m){case"*":{s.payload.arrayProps={};break}case"+":{s.payload.arrayProps={min:1};break}case"?":{s.payload.required=!1;break}}c&&(s.payload.arrayProps=b(b({},s.payload.arrayProps),{},{min:c[0],max:c[1]})),r.push(s)}return{parse:g(r),build:v(r)}}const j={express:[[/:id<.+>/g,":id"],[/:id\+/g,"*id"],[/:id\*/g,"*id"],[/:id\{.+\}/g,"*id"],[/([a-zA-Z0-9:/_.]+)\/([*:])id\?/g,"$1{/$2id}"],[/([*:])id\?/g,"{$1id}"]]};function S(e,r){switch(r){case"express":{let t=e;for(const[n,i]of j.express)t.match(n)&&(t=t.replace(n,i));return t}}}exports.compile=O;exports.convertPath=S;
package/dist/index.d.ts CHANGED
@@ -119,18 +119,10 @@ declare type CompabilityMode = 'express';
119
119
  infer TokenReplacer
120
120
  ] ? ['invalid', JoinPath<[...Res, TokenReplacer, ...Rest]>] : ValidateTokens<Path, Rest, [...Res, Token & string]> : Path;
121
121
 
122
- declare type ValidateTypes<GenTypes> = GenTypes extends 'number' ? 'valid' : GenTypes extends '' ? ['invalid', `<number,union>`] : GenTypes extends string | `${string}|${string}` ? 'valid' : ['invalid', `<number,union>`];
122
+ declare type ValidateTypes<GenTypes> = GenTypes extends 'number' ? 'valid' : GenTypes extends '' ? ['invalid', `<number,union>`] : GenTypes extends `${string}|${string}` | string ? 'valid' : ['invalid', `<number,union>`];
123
123
 
124
124
  declare type WithModificator<Type, T extends string> = T extends `${infer K}{${infer Start},${infer End}}+` ? Type[] : T extends `${infer K}{${infer Start},${infer End}}*` ? Type[] : T extends `${infer K}{${infer Start},${infer End}}?` ? Type[] | undefined : T extends `${infer K}{${infer Start},${infer End}}` ? Type[] : T extends `${infer K}+` ? Type[] : T extends `${infer K}*` ? Type[] : T extends `${infer K}?` ? Type | undefined : Type;
125
125
 
126
126
  declare type WithoutModificator<T extends string> = T extends `${infer K}{${infer Start},${infer End}}${infer Modificator}` ? K : T extends `${infer K}{${infer Start},${infer End}}` ? K : T extends `${infer K}?` ? K : T extends `${infer K}*` ? K : T extends `${infer K}+` ? K : T;
127
127
 
128
128
  export { }
129
-
130
-
131
- declare module 'vitest' {
132
- interface Assertion<T = any> extends CustomMatchers<T> {
133
- }
134
- interface AsymmetricMatchersContaining extends CustomMatchers {
135
- }
136
- }
package/dist/index.js CHANGED
@@ -1,278 +1,266 @@
1
- function prepareParser(tokens) {
2
- return (input) => {
3
- const rawTokens = input.split("/").map((part) => part.trim()).filter((part) => part !== "");
4
- let params = null;
5
- function setKey(key, value) {
6
- if (!params) {
7
- params = {};
8
- }
9
- params[key] = value;
1
+ function g(e) {
2
+ return (r) => {
3
+ const t = r.split("/").map((c) => c.trim()).filter((c) => c !== "");
4
+ let n = null;
5
+ function i(c, o) {
6
+ n || (n = {}), n[c] = o;
10
7
  }
11
- if (tokens.length === 0) {
12
- return rawTokens.length === 0 ? {
13
- path: input,
8
+ if (e.length === 0)
9
+ return t.length === 0 ? {
10
+ path: r,
14
11
  params: null
15
12
  } : null;
16
- }
17
- for (let i = 0; i < tokens.length; i++) {
18
- const token = tokens[i];
19
- switch (token.type) {
13
+ for (let c = 0; c < e.length; c++) {
14
+ const o = e[c];
15
+ switch (o.type) {
20
16
  case "const": {
21
- if (token.name !== rawTokens.shift()) {
17
+ if (o.name !== t.shift())
22
18
  return null;
23
- }
24
19
  continue;
25
20
  }
26
21
  case "parameter": {
27
22
  const {
28
- arrayProps,
29
- genericProps,
30
- required
31
- } = token.payload;
32
- if (arrayProps) {
33
- const array = [];
34
- let rawToken2;
35
- while (true) {
36
- rawToken2 = rawTokens.shift();
37
- if (!rawToken2) {
23
+ arrayProps: m,
24
+ genericProps: u,
25
+ required: s
26
+ } = o.payload;
27
+ if (m) {
28
+ var a;
29
+ const d = [];
30
+ let f;
31
+ for (; ; ) {
32
+ var l;
33
+ if (f = t.shift(), !f)
38
34
  break;
39
- }
40
- switch (genericProps == null ? void 0 : genericProps.type) {
35
+ switch (u?.type) {
41
36
  case "number": {
42
- if (isNaN(+rawToken2)) {
37
+ if (isNaN(+f))
43
38
  return null;
44
- }
45
- array.push(+rawToken2);
39
+ d.push(+f);
46
40
  break;
47
41
  }
48
42
  case "union": {
49
- if (!genericProps.items.includes(rawToken2)) {
43
+ if (!u.items.includes(f))
50
44
  return null;
51
- }
52
- array.push(rawToken2);
45
+ d.push(f);
53
46
  break;
54
47
  }
55
48
  default: {
56
- array.push(rawToken2);
49
+ d.push(f);
57
50
  break;
58
51
  }
59
52
  }
60
- if (array.length >= (arrayProps.max ?? Infinity)) {
53
+ if (d.length >= ((l = m.max) !== null && l !== void 0 ? l : 1 / 0))
61
54
  break;
62
- }
63
55
  }
64
- if (array.length < (arrayProps.min ?? 0)) {
56
+ if (d.length < ((a = m.min) !== null && a !== void 0 ? a : 0) || t.length > 0 && !e[c + 1])
65
57
  return null;
66
- }
67
- if (rawTokens.length > 0 && !tokens[i + 1]) {
68
- return null;
69
- }
70
- setKey(token.name, array);
58
+ i(o.name, d);
71
59
  break;
72
60
  }
73
- const rawToken = rawTokens.shift();
74
- if (required && !rawToken) {
61
+ const p = t.shift();
62
+ if (s && !p)
75
63
  return null;
76
- }
77
- if (!rawToken) {
78
- setKey(token.name, void 0);
64
+ if (!p) {
65
+ i(o.name, void 0);
79
66
  continue;
80
67
  }
81
- switch (genericProps == null ? void 0 : genericProps.type) {
68
+ switch (u?.type) {
82
69
  case "number": {
83
- if (isNaN(+rawToken)) {
70
+ if (isNaN(+p))
84
71
  return null;
85
- }
86
- setKey(token.name, +rawToken);
72
+ i(o.name, +p);
87
73
  break;
88
74
  }
89
75
  case "union": {
90
- if (!genericProps.items.includes(rawToken)) {
76
+ if (!u.items.includes(p))
91
77
  return null;
92
- }
93
- setKey(token.name, rawToken);
78
+ i(o.name, p);
94
79
  break;
95
80
  }
96
81
  default: {
97
- setKey(token.name, rawToken);
82
+ i(o.name, p);
98
83
  break;
99
84
  }
100
85
  }
101
86
  }
102
87
  }
103
88
  }
104
- if (rawTokens.length > 0) {
105
- return null;
106
- }
107
- return {
108
- path: input,
109
- params
89
+ return t.length > 0 ? null : {
90
+ path: r,
91
+ params: n
110
92
  };
111
93
  };
112
94
  }
113
- function getTokenParameters(params) {
114
- if (!params) {
95
+ function h(e) {
96
+ if (!e)
115
97
  return null;
116
- }
117
- const name = params[1];
118
- let genericProps;
119
- let arrayProps;
120
- let modificator;
121
- for (const parameter of params.slice(2)) {
122
- if (!parameter) {
123
- continue;
124
- }
125
- if (parameter.includes("<")) {
126
- genericProps = parameter.replaceAll(/\s/g, "").replace("<", "").replace(">", "");
127
- continue;
128
- }
129
- if (parameter.includes("{")) {
130
- arrayProps = parameter.replace("{", "").replace("}", "").split(",").map((item) => parseInt(item));
131
- }
132
- if (["*", "?", "+"].includes(parameter)) {
133
- modificator = parameter;
134
- continue;
98
+ const r = e[1];
99
+ let t, n, i;
100
+ for (const a of e.slice(2))
101
+ if (a) {
102
+ if (a.includes("<")) {
103
+ t = a.replaceAll(/\s/g, "").replace("<", "").replace(">", "");
104
+ continue;
105
+ }
106
+ if (a.includes("{") && (n = a.replace("{", "").replace("}", "").split(",").map((l) => parseInt(l))), ["*", "?", "+"].includes(a)) {
107
+ i = a;
108
+ continue;
109
+ }
135
110
  }
136
- }
137
111
  return {
138
- name,
139
- genericProps,
140
- arrayProps,
141
- modificator
112
+ name: r,
113
+ genericProps: t,
114
+ arrayProps: n,
115
+ modificator: i
142
116
  };
143
117
  }
144
- function prepareBuilder(tokens) {
145
- return (params) => {
146
- const result = [];
147
- if (tokens.length === 0) {
118
+ function v(e) {
119
+ return (r) => {
120
+ const t = [];
121
+ if (e.length === 0)
148
122
  return "/";
149
- }
150
- for (const token of tokens) {
151
- switch (token.type) {
123
+ for (const n of e)
124
+ switch (n.type) {
152
125
  case "const": {
153
- result.push(token.name);
126
+ t.push(n.name);
154
127
  break;
155
128
  }
156
129
  case "parameter": {
157
- if (!params[token.name]) {
130
+ if (!r[n.name])
158
131
  continue;
159
- }
160
- if (Array.isArray(params[token.name])) {
161
- for (const param of params[token.name]) {
162
- result.push(param.toString());
163
- }
164
- } else {
165
- result.push(params[token.name].toString());
166
- }
132
+ if (Array.isArray(r[n.name]))
133
+ for (const i of r[n.name])
134
+ t.push(i.toString());
135
+ else
136
+ t.push(r[n.name].toString());
167
137
  break;
168
138
  }
169
139
  }
170
- }
171
- return `/${result.join("/")}`;
140
+ return "/".concat(t.join("/"));
172
141
  };
173
142
  }
174
- function compile(path) {
175
- const tokens = [];
176
- const regexp = /:(\w+)(<[\s?\w|]+>)?({\d+\,\d+})?([+*?])?/;
177
- const parsedTokens = path.split("/").filter(Boolean);
178
- for (let i = 0; i < parsedTokens.length; i++) {
179
- const parsedToken = parsedTokens[i];
180
- if (!parsedToken) {
143
+ function y(e, r) {
144
+ var t = Object.keys(e);
145
+ if (Object.getOwnPropertySymbols) {
146
+ var n = Object.getOwnPropertySymbols(e);
147
+ r && (n = n.filter(function(i) {
148
+ return Object.getOwnPropertyDescriptor(e, i).enumerable;
149
+ })), t.push.apply(t, n);
150
+ }
151
+ return t;
152
+ }
153
+ function b(e) {
154
+ for (var r = 1; r < arguments.length; r++) {
155
+ var t = arguments[r] != null ? arguments[r] : {};
156
+ r % 2 ? y(Object(t), !0).forEach(function(n) {
157
+ P(e, n, t[n]);
158
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : y(Object(t)).forEach(function(n) {
159
+ Object.defineProperty(e, n, Object.getOwnPropertyDescriptor(t, n));
160
+ });
161
+ }
162
+ return e;
163
+ }
164
+ function P(e, r, t) {
165
+ return (r = w(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e;
166
+ }
167
+ function w(e) {
168
+ var r = k(e, "string");
169
+ return typeof r == "symbol" ? r : r + "";
170
+ }
171
+ function k(e, r) {
172
+ if (typeof e != "object" || !e) return e;
173
+ var t = e[Symbol.toPrimitive];
174
+ if (t !== void 0) {
175
+ var n = t.call(e, r);
176
+ if (typeof n != "object") return n;
177
+ throw new TypeError("@@toPrimitive must return a primitive value.");
178
+ }
179
+ return (r === "string" ? String : Number)(e);
180
+ }
181
+ function j(e) {
182
+ const r = [], t = /:(\w+)(<[\s?\w|]+>)?({\d+,\d+})?([+*?])?/, n = e.split("/").filter(Boolean);
183
+ for (let i = 0; i < n.length; i++) {
184
+ const a = n[i];
185
+ if (!a)
181
186
  continue;
182
- }
183
- const parameters = getTokenParameters(parsedToken.match(regexp));
184
- if (!parameters) {
185
- tokens.push({
187
+ const l = h(a.match(t));
188
+ if (!l) {
189
+ r.push({
186
190
  type: "const",
187
- name: parsedToken,
191
+ name: a,
188
192
  payload: void 0
189
193
  });
190
194
  continue;
191
195
  }
192
196
  const {
193
- arrayProps,
194
- genericProps,
195
- modificator,
196
- name
197
- } = parameters;
198
- if (!name) {
199
- throw new Error(`Invalid path: "${path}". Name for argument must be provided`);
200
- }
201
- const token = {
197
+ arrayProps: c,
198
+ genericProps: o,
199
+ modificator: m,
200
+ name: u
201
+ } = l;
202
+ if (!u)
203
+ throw new Error('Invalid path: "'.concat(e, '". Name for argument must be provided'));
204
+ const s = {
202
205
  type: "parameter",
203
- name,
206
+ name: u,
204
207
  payload: {
205
- required: true
208
+ required: !0
206
209
  }
207
210
  };
208
- if (genericProps && genericProps === "number") {
209
- token.payload.genericProps = {
210
- type: "number"
211
- };
212
- }
213
- if (genericProps && genericProps.includes("|")) {
214
- token.payload.genericProps = {
215
- type: "union",
216
- items: genericProps.split("|")
217
- };
218
- }
219
- switch (modificator) {
211
+ switch (o && o === "number" && (s.payload.genericProps = {
212
+ type: "number"
213
+ }), o && o.includes("|") && (s.payload.genericProps = {
214
+ type: "union",
215
+ items: o.split("|")
216
+ }), m) {
220
217
  case "*": {
221
- token.payload.arrayProps = {};
218
+ s.payload.arrayProps = {};
222
219
  break;
223
220
  }
224
221
  case "+": {
225
- token.payload.arrayProps = {
222
+ s.payload.arrayProps = {
226
223
  min: 1
227
224
  };
228
225
  break;
229
226
  }
230
227
  case "?": {
231
- token.payload.required = false;
228
+ s.payload.required = !1;
232
229
  break;
233
230
  }
234
231
  }
235
- if (arrayProps) {
236
- token.payload.arrayProps = {
237
- ...token.payload.arrayProps,
238
- min: arrayProps[0],
239
- max: arrayProps[1]
240
- };
241
- }
242
- tokens.push(token);
232
+ c && (s.payload.arrayProps = b(b({}, s.payload.arrayProps), {}, {
233
+ min: c[0],
234
+ max: c[1]
235
+ })), r.push(s);
243
236
  }
244
237
  return {
245
238
  /**
246
239
  * @param input Input path
247
240
  * @returns `{ path: string; params: Params }` | `null`
248
241
  */
249
- parse: prepareParser(tokens),
242
+ parse: g(r),
250
243
  /**
251
244
  * @param params Route parameters
252
245
  * @returns string
253
246
  */
254
- build: prepareBuilder(tokens)
247
+ build: v(r)
255
248
  };
256
249
  }
257
- const cases = {
258
- express: [[/:id<.+>/g, ":id"], [/:id\+/g, "*id"], [/:id\*/g, "*id"], [/:id\{.+\}/g, "*id"], [/([a-zA-Z0-9:/_\.]+)\/([\*:])id\?/g, "$1{/$2id}"], [/([\*:])id\?/g, "{$1id}"]]
250
+ const O = {
251
+ express: [[/:id<.+>/g, ":id"], [/:id\+/g, "*id"], [/:id\*/g, "*id"], [/:id\{.+\}/g, "*id"], [/([a-zA-Z0-9:/_.]+)\/([*:])id\?/g, "$1{/$2id}"], [/([*:])id\?/g, "{$1id}"]]
259
252
  };
260
- function convertPath(path, mode) {
261
- switch (mode) {
253
+ function S(e, r) {
254
+ switch (r) {
262
255
  case "express": {
263
- let newPath = path;
264
- for (const [regex, replacement] of cases.express) {
265
- const match = newPath.match(regex);
266
- if (!match) {
267
- continue;
268
- }
269
- newPath = newPath.replace(regex, replacement);
270
- }
271
- return newPath;
256
+ let t = e;
257
+ for (const [n, i] of O.express)
258
+ t.match(n) && (t = t.replace(n, i));
259
+ return t;
272
260
  }
273
261
  }
274
262
  }
275
263
  export {
276
- compile,
277
- convertPath
264
+ j as compile,
265
+ S as convertPath
278
266
  };
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "registry": "https://registry.npmjs.org/"
6
6
  },
7
7
  "private": false,
8
- "version": "0.12.0",
8
+ "version": "1.0.0-rc.0",
9
9
  "description": "Paths with power of effector",
10
10
  "keywords": [
11
11
  "paths",
@@ -34,12 +34,12 @@
34
34
  "type": "git",
35
35
  "url": "git+https://github.com/movpushmov/argon-router.git"
36
36
  },
37
- "scripts": {
38
- "build": "vite build",
39
- "test": "vitest run"
40
- },
41
37
  "bugs": {
42
38
  "url": "https://github.com/movpushmov/argon-router/issues"
43
39
  },
44
- "gitHead": "9832d6cd282d6abd33c26ba4d03b9a1176110fc4"
45
- }
40
+ "gitHead": "9832d6cd282d6abd33c26ba4d03b9a1176110fc4",
41
+ "scripts": {
42
+ "build": "vite build",
43
+ "test": "vitest run"
44
+ }
45
+ }