@argon-router/paths 0.7.0 → 0.9.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 CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function g(e){return r=>{const t=r.split("/").map(u=>u.trim()).filter(u=>u!=="");let n=null;function i(u,o){n||(n={}),n[u]=o}if(e.length===0)return t.length===0?{path:r,params:null}:null;for(let u=0;u<e.length;u++){const o=e[u];switch(o.type){case"const":{if(o.name!==t.shift())return null;continue}case"parameter":{const{arrayProps:y,genericProps:l,required:c}=o.payload;if(y){var a;const m=[];let f;for(;;){var s;if(f=t.shift(),!f)break;switch(l==null?void 0:l.type){case"number":{if(isNaN(+f))return null;m.push(+f);break}case"union":{if(!l.items.includes(f))return null;m.push(f);break}default:{m.push(f);break}}if(m.length>=((s=y.max)!==null&&s!==void 0?s:1/0))break}if(m.length<((a=y.min)!==null&&a!==void 0?a:0)||t.length>0&&!e[u+1])return null;i(o.name,m);break}const p=t.shift();if(c&&!p)return null;if(!p){i(o.name,void 0);continue}switch(l==null?void 0:l.type){case"number":{if(isNaN(+p))return null;i(o.name,+p);break}case"union":{if(!l.items.includes(p))return null;i(o.name,p);break}default:{i(o.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 a of e.slice(2))if(a){if(a.includes("<")){t=a.replace("<","").replace(">","");continue}if(a.includes("{")&&(n=a.replace("{","").replace("}","").split(",").map(s=>parseInt(s))),["*","?","+"].includes(a)){i=a;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 d(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?d(Object(t),!0).forEach(function(n){P(e,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):d(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+)(<[\w|]+>)?({\d+\,\d+})?([+*?])?/,n=e.split("/").filter(Boolean);for(let i=0;i<n.length;i++){const a=n[i];if(!a)continue;const s=h(a.match(t));if(!s){r.push({type:"const",name:a,payload:void 0});continue}const{arrayProps:u,genericProps:o,modificator:y,name:l}=s;if(!l)throw new Error('Invalid path: "'.concat(e,'". Name for argument must be provided'));const c={type:"parameter",name:l,payload:{required:!0}};switch(o&&o==="number"&&(c.payload.genericProps={type:"number"}),o&&o.includes("|")&&(c.payload.genericProps={type:"union",items:o.split("|")}),y){case"*":{c.payload.arrayProps={};break}case"+":{c.payload.arrayProps={min:1};break}case"?":{c.payload.required=!1;break}}u&&(c.payload.arrayProps=b(b({},c.payload.arrayProps),{},{min:u[0],max:u[1]})),r.push(c)}return{parse:g(r),build:v(r)}}exports.compile=O;
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"}),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)}};
package/dist/index.d.ts CHANGED
@@ -37,7 +37,11 @@ export declare type Builder<T> = (params: T) => string;
37
37
  build: Builder<Params>;
38
38
  };
39
39
 
40
- declare type GenericType<T extends string> = T extends `number` ? number : T extends `${infer A}|${infer B}` ? Union<T> : T;
40
+ declare type GenericType<T extends string> = ReplaceAll<T, ' ', ''> extends infer Trimmed ? Trimmed extends `number` ? number : Trimmed extends `${infer A}|${infer B}` ? Union<Trimmed> : Trimmed : never;
41
+
42
+ declare type Join<T extends any[]> = T['length'] extends 0 ? never : T extends [infer F, ...infer Rest] ? Join<Rest> extends infer Tail ? [Tail] extends [never] ? `${F & string}` : `${F & string}/${Tail & string}` : never : never;
43
+
44
+ declare type JoinPath<T extends any[]> = `/${Join<T>}`;
41
45
 
42
46
  declare type Parameter<Name extends string, Payload> = {
43
47
  [k in Name]: Payload;
@@ -84,6 +88,10 @@ export declare type Builder<T> = (params: T) => string;
84
88
  */
85
89
  export declare type ParseUrlParams<T extends string> = Unwrap<UrlParams<T>>;
86
90
 
91
+ declare type ReplaceAll<S, From extends string, To extends string> = From extends '' ? S : S extends `${infer R1}${From}${infer R2}` ? `${R1}${To}${ReplaceAll<R2, From, To>}` : S;
92
+
93
+ declare type SplitPath<S> = string extends S ? string[] : S extends `${infer Head}/${infer Tail}` ? Head extends '' ? SplitPath<Tail> : Tail extends '' ? [Head] : [Head, ...SplitPath<Tail>] : [S];
94
+
87
95
  declare type Union<T extends string, Result = void> = T extends `${infer Start}|${infer Type}` ? Union<Type, Result extends void ? Start : Result | Start> : Result extends void ? T : Result | T;
88
96
 
89
97
  declare type Unwrap<Result extends UrlParams<any, void>> = {
@@ -94,6 +102,21 @@ export declare type Builder<T> = (params: T) => string;
94
102
 
95
103
  declare type UrlParams<T extends string, Result = void> = T extends `/:${infer Parameter}/${infer Route}` ? Result extends void ? UrlParams<`/${Route}`, UrlParameter<`:${Parameter}`>> : UrlParams<`/${Route}`, Result & UrlParameter<`:${Parameter}`>> : T extends `/:${infer Parameter}` ? Result extends void ? UrlParameter<`:${Parameter}`> : Result & UrlParameter<`:${Parameter}`> : T extends `/${infer Static}/${infer Next}` ? UrlParams<`/${Next}`, Result> : Result;
96
104
 
105
+ export declare type ValidatePath<Path> = ValidateTokens<Path, SplitPath<Path>>;
106
+
107
+ declare type ValidateRange<Range> = Range extends `${infer L},${infer R}` ? L extends `${number}` ? R extends `${number}` ? ['valid', `{${Range}`] : ['invalid', `{${L},number}`] : R extends `${number}` ? ['invalid', `{number,${R}}`] : ['invalid', `{number,number}`] : ['invalid', `{number,number}`];
108
+
109
+ declare type ValidateToken<Token> = Token extends `:${infer RawParam}` ? RawParam extends `${infer WithoutModifier}${'*' | '?' | '+'}` ? RawParam extends `${WithoutModifier}${infer Modifier}` ? ValidateTokenBase<WithoutModifier, Modifier> : never : ValidateTokenBase<RawParam> : 'valid';
110
+
111
+ declare type ValidateTokenBase<Token extends string, PostFix extends string = ''> = Token extends `${infer Param}<${infer Types}>{${infer Range}}` ? ValidateTypes<Types> extends ['invalid', infer TypesReplacer] ? ['invalid', `:${Param}${TypesReplacer & string}{${Range}}${PostFix}`] : ValidateRange<Range> extends ['invalid', infer RangeReplacer] ? ['invalid', `:${Param}<${Types}>${RangeReplacer & string}${PostFix}`] : 'valid' : Token extends `${infer Param}<${infer Types}>` ? ValidateTypes<Types> extends ['invalid', infer TypesReplacer] ? ['invalid', `:${Param}${TypesReplacer & string}${PostFix}`] : 'valid' : Token extends `${infer Param}{${infer Range}}` ? ValidateRange<Range> extends ['invalid', infer RangeReplacer] ? ['invalid', `:${Param}${RangeReplacer & string}${PostFix}`] : 'valid' : 'valid';
112
+
113
+ declare type ValidateTokens<Path, Current, Res extends string[] = []> = Current extends [infer Token, ...infer Rest] ? ValidateToken<ReplaceAll<Token, ' ', ''>> extends [
114
+ 'invalid',
115
+ infer TokenReplacer
116
+ ] ? ['invalid', JoinPath<[...Res, TokenReplacer, ...Rest]>] : ValidateTokens<Path, Rest, [...Res, Token & string]> : Path;
117
+
118
+ declare type ValidateTypes<GenTypes> = GenTypes extends 'number' ? 'valid' : GenTypes extends '' ? ['invalid', `<number,union>`] : GenTypes extends string | `${string}|${string}` ? 'valid' : ['invalid', `<number,union>`];
119
+
97
120
  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;
98
121
 
99
122
  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;
package/dist/index.js CHANGED
@@ -1,252 +1,259 @@
1
- function h(e) {
2
- return (r) => {
3
- const n = r.split("/").map((u) => u.trim()).filter((u) => u !== "");
4
- let t = null;
5
- function i(u, o) {
6
- t || (t = {}), t[u] = o;
7
- }
8
- if (e.length === 0)
9
- return n.length === 0 ? {
10
- path: r,
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;
10
+ }
11
+ if (tokens.length === 0) {
12
+ return rawTokens.length === 0 ? {
13
+ path: input,
11
14
  params: null
12
15
  } : null;
13
- for (let u = 0; u < e.length; u++) {
14
- const o = e[u];
15
- switch (o.type) {
16
+ }
17
+ for (let i = 0; i < tokens.length; i++) {
18
+ const token = tokens[i];
19
+ switch (token.type) {
16
20
  case "const": {
17
- if (o.name !== n.shift())
21
+ if (token.name !== rawTokens.shift()) {
18
22
  return null;
23
+ }
19
24
  continue;
20
25
  }
21
26
  case "parameter": {
22
27
  const {
23
- arrayProps: y,
24
- genericProps: l,
25
- required: c
26
- } = o.payload;
27
- if (y) {
28
- var a;
29
- const m = [];
30
- let f;
31
- for (; ; ) {
32
- var s;
33
- if (f = n.shift(), !f)
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) {
34
38
  break;
35
- switch (l == null ? void 0 : l.type) {
39
+ }
40
+ switch (genericProps == null ? void 0 : genericProps.type) {
36
41
  case "number": {
37
- if (isNaN(+f))
42
+ if (isNaN(+rawToken2)) {
38
43
  return null;
39
- m.push(+f);
44
+ }
45
+ array.push(+rawToken2);
40
46
  break;
41
47
  }
42
48
  case "union": {
43
- if (!l.items.includes(f))
49
+ if (!genericProps.items.includes(rawToken2)) {
44
50
  return null;
45
- m.push(f);
51
+ }
52
+ array.push(rawToken2);
46
53
  break;
47
54
  }
48
55
  default: {
49
- m.push(f);
56
+ array.push(rawToken2);
50
57
  break;
51
58
  }
52
59
  }
53
- if (m.length >= ((s = y.max) !== null && s !== void 0 ? s : 1 / 0))
60
+ if (array.length >= (arrayProps.max ?? Infinity)) {
54
61
  break;
62
+ }
55
63
  }
56
- if (m.length < ((a = y.min) !== null && a !== void 0 ? a : 0) || n.length > 0 && !e[u + 1])
64
+ if (array.length < (arrayProps.min ?? 0)) {
57
65
  return null;
58
- i(o.name, m);
66
+ }
67
+ if (rawTokens.length > 0 && !tokens[i + 1]) {
68
+ return null;
69
+ }
70
+ setKey(token.name, array);
59
71
  break;
60
72
  }
61
- const p = n.shift();
62
- if (c && !p)
73
+ const rawToken = rawTokens.shift();
74
+ if (required && !rawToken) {
63
75
  return null;
64
- if (!p) {
65
- i(o.name, void 0);
76
+ }
77
+ if (!rawToken) {
78
+ setKey(token.name, void 0);
66
79
  continue;
67
80
  }
68
- switch (l == null ? void 0 : l.type) {
81
+ switch (genericProps == null ? void 0 : genericProps.type) {
69
82
  case "number": {
70
- if (isNaN(+p))
83
+ if (isNaN(+rawToken)) {
71
84
  return null;
72
- i(o.name, +p);
85
+ }
86
+ setKey(token.name, +rawToken);
73
87
  break;
74
88
  }
75
89
  case "union": {
76
- if (!l.items.includes(p))
90
+ if (!genericProps.items.includes(rawToken)) {
77
91
  return null;
78
- i(o.name, p);
92
+ }
93
+ setKey(token.name, rawToken);
79
94
  break;
80
95
  }
81
96
  default: {
82
- i(o.name, p);
97
+ setKey(token.name, rawToken);
83
98
  break;
84
99
  }
85
100
  }
86
101
  }
87
102
  }
88
103
  }
89
- return n.length > 0 ? null : {
90
- path: r,
91
- params: t
104
+ if (rawTokens.length > 0) {
105
+ return null;
106
+ }
107
+ return {
108
+ path: input,
109
+ params
92
110
  };
93
111
  };
94
112
  }
95
- function g(e) {
96
- if (!e)
113
+ function getTokenParameters(params) {
114
+ if (!params) {
97
115
  return null;
98
- const r = e[1];
99
- let n, t, i;
100
- for (const a of e.slice(2))
101
- if (a) {
102
- if (a.includes("<")) {
103
- n = a.replace("<", "").replace(">", "");
104
- continue;
105
- }
106
- if (a.includes("{") && (t = a.replace("{", "").replace("}", "").split(",").map((s) => parseInt(s))), ["*", "?", "+"].includes(a)) {
107
- i = a;
108
- continue;
109
- }
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;
110
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;
135
+ }
136
+ }
111
137
  return {
112
- name: r,
113
- genericProps: n,
114
- arrayProps: t,
115
- modificator: i
138
+ name,
139
+ genericProps,
140
+ arrayProps,
141
+ modificator
116
142
  };
117
143
  }
118
- function v(e) {
119
- return (r) => {
120
- const n = [];
121
- if (e.length === 0)
144
+ function prepareBuilder(tokens) {
145
+ return (params) => {
146
+ const result = [];
147
+ if (tokens.length === 0) {
122
148
  return "/";
123
- for (const t of e)
124
- switch (t.type) {
149
+ }
150
+ for (const token of tokens) {
151
+ switch (token.type) {
125
152
  case "const": {
126
- n.push(t.name);
153
+ result.push(token.name);
127
154
  break;
128
155
  }
129
156
  case "parameter": {
130
- if (!r[t.name])
157
+ if (!params[token.name]) {
131
158
  continue;
132
- if (Array.isArray(r[t.name]))
133
- for (const i of r[t.name])
134
- n.push(i.toString());
135
- else
136
- n.push(r[t.name].toString());
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
+ }
137
167
  break;
138
168
  }
139
169
  }
140
- return "/".concat(n.join("/"));
170
+ }
171
+ return `/${result.join("/")}`;
141
172
  };
142
173
  }
143
- function d(e, r) {
144
- var n = Object.keys(e);
145
- if (Object.getOwnPropertySymbols) {
146
- var t = Object.getOwnPropertySymbols(e);
147
- r && (t = t.filter(function(i) {
148
- return Object.getOwnPropertyDescriptor(e, i).enumerable;
149
- })), n.push.apply(n, t);
150
- }
151
- return n;
152
- }
153
- function b(e) {
154
- for (var r = 1; r < arguments.length; r++) {
155
- var n = arguments[r] != null ? arguments[r] : {};
156
- r % 2 ? d(Object(n), !0).forEach(function(t) {
157
- P(e, t, n[t]);
158
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : d(Object(n)).forEach(function(t) {
159
- Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));
160
- });
161
- }
162
- return e;
163
- }
164
- function P(e, r, n) {
165
- return (r = w(r)) in e ? Object.defineProperty(e, r, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = n, 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 n = e[Symbol.toPrimitive];
174
- if (n !== void 0) {
175
- var t = n.call(e, r);
176
- if (typeof t != "object") return t;
177
- throw new TypeError("@@toPrimitive must return a primitive value.");
178
- }
179
- return (r === "string" ? String : Number)(e);
180
- }
181
- function O(e) {
182
- const r = [], n = /:(\w+)(<[\w|]+>)?({\d+\,\d+})?([+*?])?/, t = e.split("/").filter(Boolean);
183
- for (let i = 0; i < t.length; i++) {
184
- const a = t[i];
185
- if (!a)
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) {
186
181
  continue;
187
- const s = g(a.match(n));
188
- if (!s) {
189
- r.push({
182
+ }
183
+ const parameters = getTokenParameters(parsedToken.match(regexp));
184
+ if (!parameters) {
185
+ tokens.push({
190
186
  type: "const",
191
- name: a,
187
+ name: parsedToken,
192
188
  payload: void 0
193
189
  });
194
190
  continue;
195
191
  }
196
192
  const {
197
- arrayProps: u,
198
- genericProps: o,
199
- modificator: y,
200
- name: l
201
- } = s;
202
- if (!l)
203
- throw new Error('Invalid path: "'.concat(e, '". Name for argument must be provided'));
204
- const c = {
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 = {
205
202
  type: "parameter",
206
- name: l,
203
+ name,
207
204
  payload: {
208
- required: !0
205
+ required: true
209
206
  }
210
207
  };
211
- switch (o && o === "number" && (c.payload.genericProps = {
212
- type: "number"
213
- }), o && o.includes("|") && (c.payload.genericProps = {
214
- type: "union",
215
- items: o.split("|")
216
- }), y) {
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) {
217
220
  case "*": {
218
- c.payload.arrayProps = {};
221
+ token.payload.arrayProps = {};
219
222
  break;
220
223
  }
221
224
  case "+": {
222
- c.payload.arrayProps = {
225
+ token.payload.arrayProps = {
223
226
  min: 1
224
227
  };
225
228
  break;
226
229
  }
227
230
  case "?": {
228
- c.payload.required = !1;
231
+ token.payload.required = false;
229
232
  break;
230
233
  }
231
234
  }
232
- u && (c.payload.arrayProps = b(b({}, c.payload.arrayProps), {}, {
233
- min: u[0],
234
- max: u[1]
235
- })), r.push(c);
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);
236
243
  }
237
244
  return {
238
245
  /**
239
246
  * @param input Input path
240
247
  * @returns `{ path: string; params: Params }` | `null`
241
248
  */
242
- parse: h(r),
249
+ parse: prepareParser(tokens),
243
250
  /**
244
251
  * @param params Route parameters
245
252
  * @returns string
246
253
  */
247
- build: v(r)
254
+ build: prepareBuilder(tokens)
248
255
  };
249
256
  }
250
257
  export {
251
- O as compile
258
+ compile
252
259
  };
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "registry": "https://registry.npmjs.org/"
6
6
  },
7
7
  "private": false,
8
- "version": "0.7.0",
8
+ "version": "0.9.0",
9
9
  "description": "Paths with power of effector",
10
10
  "keywords": [
11
11
  "paths",
@@ -41,5 +41,5 @@
41
41
  "bugs": {
42
42
  "url": "https://github.com/movpushmov/argon-router/issues"
43
43
  },
44
- "gitHead": "c91bd532af8b7bc5fc77a30db15c70e55c3516d8"
44
+ "gitHead": "fab0cd752c30cf142c168308596b2dcf2c664da2"
45
45
  }