@argon-router/core 0.8.3 → 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 +34 -7
- package/dist/index.js +846 -1034
- package/package.json +7 -6
package/dist/index.js
CHANGED
|
@@ -1,1186 +1,918 @@
|
|
|
1
|
-
import { createEffect
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
return Object.getOwnPropertyDescriptor(e, a).enumerable;
|
|
8
|
-
})), r.push.apply(r, n);
|
|
9
|
-
}
|
|
10
|
-
return r;
|
|
11
|
-
}
|
|
12
|
-
function P(e) {
|
|
13
|
-
for (var t = 1; t < arguments.length; t++) {
|
|
14
|
-
var r = arguments[t] != null ? arguments[t] : {};
|
|
15
|
-
t % 2 ? C(Object(r), !0).forEach(function(n) {
|
|
16
|
-
ne(e, n, r[n]);
|
|
17
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : C(Object(r)).forEach(function(n) {
|
|
18
|
-
Object.defineProperty(e, n, Object.getOwnPropertyDescriptor(r, n));
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
return e;
|
|
22
|
-
}
|
|
23
|
-
function ne(e, t, r) {
|
|
24
|
-
return (t = ae(t)) in e ? Object.defineProperty(e, t, { value: r, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = r, e;
|
|
25
|
-
}
|
|
26
|
-
function ae(e) {
|
|
27
|
-
var t = oe(e, "string");
|
|
28
|
-
return typeof t == "symbol" ? t : t + "";
|
|
29
|
-
}
|
|
30
|
-
function oe(e, t) {
|
|
31
|
-
if (typeof e != "object" || !e) return e;
|
|
32
|
-
var r = e[Symbol.toPrimitive];
|
|
33
|
-
if (r !== void 0) {
|
|
34
|
-
var n = r.call(e, t);
|
|
35
|
-
if (typeof n != "object") return n;
|
|
36
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
37
|
-
}
|
|
38
|
-
return (t === "string" ? String : Number)(e);
|
|
39
|
-
}
|
|
40
|
-
function ze(e) {
|
|
41
|
-
let t;
|
|
42
|
-
const r = S(() => {
|
|
43
|
-
var m;
|
|
44
|
-
return (m = t) === null || m === void 0 ? void 0 : m();
|
|
45
|
-
}, {
|
|
1
|
+
import { createEffect, createStore, createEvent, sample, split, attach, scopeBind, withFactory } from "effector";
|
|
2
|
+
import queryString from "query-string";
|
|
3
|
+
import { or, not } from "patronum";
|
|
4
|
+
function createRoute(config) {
|
|
5
|
+
let asyncImport;
|
|
6
|
+
const waitForAsyncBundleFx = createEffect(() => asyncImport == null ? void 0 : asyncImport(), {
|
|
46
7
|
name: "waitForAsyncBundleFx",
|
|
47
|
-
sid: "
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
await
|
|
8
|
+
sid: "1y76ms"
|
|
9
|
+
});
|
|
10
|
+
const beforeOpenFx = createEffect(async () => {
|
|
11
|
+
for (const fx of config.beforeOpen ?? []) {
|
|
12
|
+
await fx();
|
|
52
13
|
}
|
|
53
14
|
}, {
|
|
54
15
|
name: "beforeOpenFx",
|
|
55
|
-
sid: "-
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
16
|
+
sid: "-65tb76"
|
|
17
|
+
});
|
|
18
|
+
const openFx = createEffect(async (payload) => {
|
|
19
|
+
await waitForAsyncBundleFx();
|
|
20
|
+
await beforeOpenFx();
|
|
21
|
+
const parent = config.parent;
|
|
22
|
+
if (parent) {
|
|
23
|
+
await parent.internal.openFx({
|
|
24
|
+
...payload ?? {
|
|
25
|
+
params: {}
|
|
26
|
+
},
|
|
27
|
+
navigate: false
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return payload;
|
|
64
31
|
}, {
|
|
65
32
|
name: "openFx",
|
|
66
|
-
sid: "
|
|
67
|
-
})
|
|
33
|
+
sid: "p3u4q7"
|
|
34
|
+
});
|
|
35
|
+
const $params = createStore({}, {
|
|
68
36
|
name: "$params",
|
|
69
|
-
sid: "-
|
|
70
|
-
})
|
|
37
|
+
sid: "-a34rm3"
|
|
38
|
+
});
|
|
39
|
+
const $isOpened = createStore(false, {
|
|
71
40
|
name: "$isOpened",
|
|
72
|
-
sid: "
|
|
73
|
-
})
|
|
41
|
+
sid: "7m6f5g"
|
|
42
|
+
});
|
|
43
|
+
const $isPending = openFx.pending;
|
|
44
|
+
const open = createEvent({
|
|
74
45
|
name: "open",
|
|
75
|
-
sid: "
|
|
76
|
-
})
|
|
46
|
+
sid: "ur5fa6"
|
|
47
|
+
});
|
|
48
|
+
const close = createEvent({
|
|
77
49
|
name: "close",
|
|
78
|
-
sid: "-
|
|
79
|
-
})
|
|
50
|
+
sid: "-k33yie"
|
|
51
|
+
});
|
|
52
|
+
const opened = createEvent({
|
|
80
53
|
name: "opened",
|
|
81
|
-
sid: "-
|
|
82
|
-
})
|
|
54
|
+
sid: "-nt8hns"
|
|
55
|
+
});
|
|
56
|
+
const openedOnServer = createEvent({
|
|
83
57
|
name: "openedOnServer",
|
|
84
|
-
sid: "
|
|
85
|
-
})
|
|
58
|
+
sid: "hbjexo"
|
|
59
|
+
});
|
|
60
|
+
const openedOnClient = createEvent({
|
|
86
61
|
name: "openedOnClient",
|
|
87
|
-
sid: "
|
|
88
|
-
})
|
|
62
|
+
sid: "h92wzn"
|
|
63
|
+
});
|
|
64
|
+
const navigated = createEvent({
|
|
89
65
|
name: "navigated",
|
|
90
|
-
sid: "-
|
|
91
|
-
})
|
|
66
|
+
sid: "-8amrhe"
|
|
67
|
+
});
|
|
68
|
+
const closed = createEvent({
|
|
92
69
|
name: "closed",
|
|
93
|
-
sid: "
|
|
70
|
+
sid: "-pql6th"
|
|
94
71
|
});
|
|
95
|
-
|
|
72
|
+
sample({
|
|
96
73
|
and: [{
|
|
97
|
-
clock:
|
|
98
|
-
target:
|
|
74
|
+
clock: open,
|
|
75
|
+
target: openFx
|
|
99
76
|
}],
|
|
100
77
|
or: {
|
|
101
|
-
sid: "
|
|
78
|
+
sid: "ymah4t"
|
|
102
79
|
}
|
|
103
80
|
});
|
|
104
|
-
const
|
|
105
|
-
|
|
81
|
+
const defaultParams = {};
|
|
82
|
+
sample({
|
|
106
83
|
and: [{
|
|
107
|
-
clock:
|
|
108
|
-
fn: (
|
|
109
|
-
|
|
84
|
+
clock: navigated,
|
|
85
|
+
fn: (payload) => {
|
|
86
|
+
if (!payload) {
|
|
87
|
+
return defaultParams;
|
|
88
|
+
}
|
|
89
|
+
return "params" in payload ? {
|
|
90
|
+
...payload.params
|
|
91
|
+
} : defaultParams;
|
|
92
|
+
},
|
|
93
|
+
target: $params
|
|
110
94
|
}],
|
|
111
95
|
or: {
|
|
112
|
-
sid: "
|
|
96
|
+
sid: "z1opqx"
|
|
113
97
|
}
|
|
114
|
-
})
|
|
98
|
+
});
|
|
99
|
+
split({
|
|
115
100
|
and: [{
|
|
116
|
-
source:
|
|
117
|
-
match: () => typeof window
|
|
101
|
+
source: navigated,
|
|
102
|
+
match: () => typeof window === "undefined" ? "server" : "client",
|
|
118
103
|
cases: {
|
|
119
|
-
server:
|
|
120
|
-
client:
|
|
104
|
+
server: openedOnServer,
|
|
105
|
+
client: openedOnClient
|
|
121
106
|
}
|
|
122
107
|
}],
|
|
123
108
|
or: {
|
|
124
|
-
sid: "
|
|
109
|
+
sid: "-zha4na"
|
|
125
110
|
}
|
|
126
|
-
})
|
|
111
|
+
});
|
|
112
|
+
sample({
|
|
127
113
|
and: [{
|
|
128
|
-
clock: [
|
|
129
|
-
target:
|
|
114
|
+
clock: [openedOnClient, openedOnServer],
|
|
115
|
+
target: opened
|
|
130
116
|
}],
|
|
131
117
|
or: {
|
|
132
|
-
sid: "-
|
|
118
|
+
sid: "-z08i93"
|
|
133
119
|
}
|
|
134
|
-
})
|
|
120
|
+
});
|
|
121
|
+
sample({
|
|
135
122
|
and: [{
|
|
136
|
-
clock:
|
|
137
|
-
target:
|
|
123
|
+
clock: close,
|
|
124
|
+
target: closed
|
|
138
125
|
}],
|
|
139
126
|
or: {
|
|
140
|
-
sid: "-
|
|
127
|
+
sid: "-yxhjaa"
|
|
141
128
|
}
|
|
142
|
-
})
|
|
129
|
+
});
|
|
130
|
+
sample({
|
|
143
131
|
and: [{
|
|
144
|
-
clock: [
|
|
145
|
-
target:
|
|
132
|
+
clock: [opened.map(() => true), closed.map(() => false)],
|
|
133
|
+
target: $isOpened
|
|
146
134
|
}],
|
|
147
135
|
or: {
|
|
148
|
-
sid: "-
|
|
136
|
+
sid: "-yj6vuw"
|
|
149
137
|
}
|
|
150
|
-
})
|
|
151
|
-
|
|
152
|
-
$
|
|
153
|
-
$
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
138
|
+
});
|
|
139
|
+
return {
|
|
140
|
+
$params,
|
|
141
|
+
$isOpened,
|
|
142
|
+
$isPending,
|
|
143
|
+
open,
|
|
144
|
+
closed,
|
|
145
|
+
opened,
|
|
146
|
+
openedOnClient,
|
|
147
|
+
openedOnServer,
|
|
148
|
+
...config,
|
|
160
149
|
internal: {
|
|
161
|
-
navigated
|
|
162
|
-
close
|
|
163
|
-
openFx
|
|
164
|
-
setAsyncImport: (
|
|
150
|
+
navigated,
|
|
151
|
+
close,
|
|
152
|
+
openFx,
|
|
153
|
+
setAsyncImport: (value) => asyncImport = value
|
|
165
154
|
},
|
|
166
155
|
"@@unitShape": () => ({
|
|
167
|
-
params:
|
|
168
|
-
isPending:
|
|
169
|
-
isOpened:
|
|
170
|
-
onOpen:
|
|
156
|
+
params: $params,
|
|
157
|
+
isPending: $isPending,
|
|
158
|
+
isOpened: $isOpened,
|
|
159
|
+
onOpen: open
|
|
171
160
|
})
|
|
172
|
-
}
|
|
161
|
+
};
|
|
173
162
|
}
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
163
|
+
const anySymbol = Symbol("any");
|
|
164
|
+
const numberSymbol = Symbol("number");
|
|
165
|
+
const stringSymbol = Symbol("string");
|
|
166
|
+
const arraySymbol = Symbol("array");
|
|
167
|
+
const booleanSymbol = Symbol("boolean");
|
|
168
|
+
const parameters = {
|
|
169
|
+
any: anySymbol,
|
|
170
|
+
number: numberSymbol,
|
|
171
|
+
string: stringSymbol,
|
|
172
|
+
array: arraySymbol,
|
|
173
|
+
boolean: booleanSymbol
|
|
180
174
|
};
|
|
181
|
-
function
|
|
182
|
-
for (const
|
|
183
|
-
if (
|
|
184
|
-
return
|
|
185
|
-
|
|
175
|
+
function isForRouteActive(forRoutes, activeRoutes) {
|
|
176
|
+
for (const route of forRoutes) {
|
|
177
|
+
if (activeRoutes.includes(route)) {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return false;
|
|
186
182
|
}
|
|
187
|
-
function
|
|
188
|
-
for (const
|
|
189
|
-
const
|
|
190
|
-
if (Array.isArray(
|
|
191
|
-
return
|
|
192
|
-
|
|
183
|
+
function isHaveValidParams(query, neededParameters) {
|
|
184
|
+
for (const key in neededParameters) {
|
|
185
|
+
const parameterType = neededParameters[key];
|
|
186
|
+
if (Array.isArray(parameterType) && (!query[key] || JSON.stringify(parameterType) !== query[key])) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
switch (typeof parameterType) {
|
|
193
190
|
case "number": {
|
|
194
|
-
if (!
|
|
195
|
-
return
|
|
191
|
+
if (!query[key] || parameterType.toString() !== query[key]) {
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
196
194
|
break;
|
|
197
195
|
}
|
|
198
196
|
case "object": {
|
|
199
|
-
if (!
|
|
200
|
-
return
|
|
197
|
+
if (!query[key] || JSON.stringify(parameterType) !== query[key]) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
201
200
|
break;
|
|
202
201
|
}
|
|
203
202
|
case "string": {
|
|
204
|
-
if (!
|
|
205
|
-
return
|
|
203
|
+
if (!query[key] || parameterType !== query[key]) {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
206
|
break;
|
|
207
207
|
}
|
|
208
208
|
case "boolean": {
|
|
209
|
-
if (!
|
|
210
|
-
return
|
|
209
|
+
if (!query[key] || !["0", "1", "false", "true"].includes(query[key])) {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
211
212
|
break;
|
|
212
213
|
}
|
|
213
214
|
}
|
|
214
|
-
switch (
|
|
215
|
-
case
|
|
216
|
-
if (!
|
|
217
|
-
return
|
|
215
|
+
switch (parameterType) {
|
|
216
|
+
case parameters.any: {
|
|
217
|
+
if (!query[key]) {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
218
220
|
break;
|
|
219
221
|
}
|
|
220
|
-
case
|
|
221
|
-
if (!
|
|
222
|
-
return
|
|
222
|
+
case parameters.string: {
|
|
223
|
+
if (!query[key] || Array.isArray(query[key])) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
223
226
|
break;
|
|
224
227
|
}
|
|
225
|
-
case
|
|
226
|
-
if (!
|
|
227
|
-
return
|
|
228
|
+
case parameters.array: {
|
|
229
|
+
if (!query[key] || !Array.isArray(query[key])) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
228
232
|
break;
|
|
229
233
|
}
|
|
230
|
-
case
|
|
231
|
-
if (!
|
|
232
|
-
return
|
|
234
|
+
case parameters.number: {
|
|
235
|
+
if (!query[key] || Array.isArray(query[key]) || isNaN(parseInt(query[key])) && isNaN(parseFloat(query[key]))) {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
233
238
|
break;
|
|
234
239
|
}
|
|
235
|
-
case
|
|
236
|
-
if (!
|
|
237
|
-
return
|
|
240
|
+
case parameters.boolean: {
|
|
241
|
+
if (!query[key] || Array.isArray(query[key]) || !["0", "1", "false", "true"].includes(query[key])) {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
238
244
|
break;
|
|
239
245
|
}
|
|
240
246
|
}
|
|
241
247
|
}
|
|
242
|
-
return
|
|
248
|
+
return true;
|
|
243
249
|
}
|
|
244
|
-
function
|
|
245
|
-
const
|
|
246
|
-
for (const
|
|
247
|
-
const
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
250
|
+
function transformParams(query, neededParameters) {
|
|
251
|
+
const result = {};
|
|
252
|
+
for (const key in neededParameters) {
|
|
253
|
+
const parameterType = neededParameters[key];
|
|
254
|
+
const data = query[key];
|
|
255
|
+
if (Array.isArray(parameterType)) {
|
|
256
|
+
const arrayData = query[key];
|
|
257
|
+
result[key] = arrayData;
|
|
251
258
|
continue;
|
|
252
259
|
}
|
|
253
|
-
switch (typeof
|
|
260
|
+
switch (typeof parameterType) {
|
|
254
261
|
case "number": {
|
|
255
|
-
|
|
262
|
+
result[key] = isNaN(parseInt(data)) ? parseFloat(data) : parseInt(data);
|
|
256
263
|
break;
|
|
257
264
|
}
|
|
258
265
|
case "object": {
|
|
259
|
-
|
|
266
|
+
result[key] = JSON.parse(data);
|
|
260
267
|
break;
|
|
261
268
|
}
|
|
262
|
-
case "string":
|
|
263
|
-
|
|
269
|
+
case "string": {
|
|
270
|
+
result[key] = data;
|
|
271
|
+
}
|
|
264
272
|
case "boolean": {
|
|
265
|
-
|
|
273
|
+
result[key] = data === "1" || data === "true";
|
|
266
274
|
break;
|
|
267
275
|
}
|
|
268
276
|
}
|
|
269
|
-
switch (
|
|
270
|
-
case
|
|
271
|
-
case
|
|
272
|
-
case
|
|
273
|
-
|
|
277
|
+
switch (parameterType) {
|
|
278
|
+
case parameters.any:
|
|
279
|
+
case parameters.string:
|
|
280
|
+
case parameters.array: {
|
|
281
|
+
result[key] = query[key];
|
|
274
282
|
break;
|
|
275
283
|
}
|
|
276
|
-
case
|
|
277
|
-
const
|
|
278
|
-
|
|
284
|
+
case parameters.number: {
|
|
285
|
+
const data2 = query[key];
|
|
286
|
+
result[key] = isNaN(parseInt(data2)) ? parseFloat(data2) : parseInt(data2);
|
|
279
287
|
break;
|
|
280
288
|
}
|
|
281
|
-
case
|
|
282
|
-
const
|
|
283
|
-
|
|
289
|
+
case parameters.boolean: {
|
|
290
|
+
const data2 = query[key];
|
|
291
|
+
result[key] = data2 === "1" || data2 === "true";
|
|
284
292
|
break;
|
|
285
293
|
}
|
|
286
294
|
}
|
|
287
295
|
}
|
|
288
|
-
return
|
|
296
|
+
return result;
|
|
289
297
|
}
|
|
290
|
-
function
|
|
298
|
+
function trackQueryControlsFactory(_ref) {
|
|
291
299
|
let {
|
|
292
|
-
$query
|
|
293
|
-
navigate
|
|
294
|
-
} =
|
|
295
|
-
return
|
|
296
|
-
$activeRoutes:
|
|
300
|
+
$query,
|
|
301
|
+
navigate
|
|
302
|
+
} = _ref;
|
|
303
|
+
return trackQueryFactory({
|
|
304
|
+
$activeRoutes: createStore([], {
|
|
297
305
|
name: "$activeRoutes",
|
|
298
|
-
sid: "
|
|
306
|
+
sid: "85ms46"
|
|
299
307
|
}),
|
|
300
|
-
$query
|
|
301
|
-
navigate
|
|
308
|
+
$query,
|
|
309
|
+
navigate
|
|
302
310
|
});
|
|
303
311
|
}
|
|
304
|
-
function
|
|
312
|
+
function trackQueryFactory(_ref2) {
|
|
305
313
|
let {
|
|
306
|
-
$activeRoutes
|
|
307
|
-
$query
|
|
308
|
-
navigate
|
|
309
|
-
} =
|
|
310
|
-
return (
|
|
314
|
+
$activeRoutes,
|
|
315
|
+
$query,
|
|
316
|
+
navigate
|
|
317
|
+
} = _ref2;
|
|
318
|
+
return (config) => {
|
|
311
319
|
const {
|
|
312
|
-
parameters:
|
|
313
|
-
forRoutes
|
|
314
|
-
} =
|
|
320
|
+
parameters: parameters2,
|
|
321
|
+
forRoutes
|
|
322
|
+
} = config;
|
|
323
|
+
const $entered = createStore(false, {
|
|
315
324
|
name: "$entered",
|
|
316
|
-
sid: "-
|
|
317
|
-
})
|
|
325
|
+
sid: "-mo5ecc"
|
|
326
|
+
});
|
|
327
|
+
const entered = createEvent({
|
|
318
328
|
name: "entered",
|
|
319
|
-
sid: "
|
|
320
|
-
})
|
|
329
|
+
sid: "kuzfr"
|
|
330
|
+
});
|
|
331
|
+
const exited = createEvent({
|
|
321
332
|
name: "exited",
|
|
322
|
-
sid: "-
|
|
323
|
-
})
|
|
333
|
+
sid: "-jzwna6"
|
|
334
|
+
});
|
|
335
|
+
const exit = createEvent({
|
|
324
336
|
name: "exit",
|
|
325
|
-
sid: "
|
|
326
|
-
})
|
|
337
|
+
sid: "7hfy2r"
|
|
338
|
+
});
|
|
339
|
+
const changeEntered = createEvent({
|
|
327
340
|
name: "changeEntered",
|
|
328
|
-
sid: "
|
|
341
|
+
sid: "qh8w6v"
|
|
329
342
|
});
|
|
330
|
-
|
|
343
|
+
sample({
|
|
331
344
|
and: [{
|
|
332
|
-
clock:
|
|
333
|
-
target:
|
|
345
|
+
clock: changeEntered,
|
|
346
|
+
target: $entered
|
|
334
347
|
}],
|
|
335
348
|
or: {
|
|
336
|
-
sid: "-
|
|
349
|
+
sid: "-gf1fe4"
|
|
337
350
|
}
|
|
338
|
-
})
|
|
351
|
+
});
|
|
352
|
+
sample({
|
|
339
353
|
and: [{
|
|
340
354
|
source: {
|
|
341
|
-
activeRoutes:
|
|
342
|
-
query:
|
|
355
|
+
activeRoutes: $activeRoutes,
|
|
356
|
+
query: $query
|
|
343
357
|
},
|
|
344
|
-
filter: (
|
|
358
|
+
filter: (_ref3) => {
|
|
345
359
|
let {
|
|
346
|
-
activeRoutes
|
|
347
|
-
query
|
|
348
|
-
} =
|
|
349
|
-
return (!
|
|
360
|
+
activeRoutes,
|
|
361
|
+
query
|
|
362
|
+
} = _ref3;
|
|
363
|
+
return (!forRoutes || isForRouteActive(forRoutes, activeRoutes)) && isHaveValidParams(query, parameters2);
|
|
350
364
|
},
|
|
351
|
-
fn: (
|
|
365
|
+
fn: (_ref4) => {
|
|
352
366
|
let {
|
|
353
|
-
query
|
|
354
|
-
} =
|
|
355
|
-
return
|
|
367
|
+
query
|
|
368
|
+
} = _ref4;
|
|
369
|
+
return transformParams(query, parameters2);
|
|
356
370
|
},
|
|
357
|
-
target: [
|
|
371
|
+
target: [entered, changeEntered.prepend(() => true)]
|
|
358
372
|
}],
|
|
359
373
|
or: {
|
|
360
|
-
sid: "-
|
|
374
|
+
sid: "-gcagfb"
|
|
361
375
|
}
|
|
362
|
-
})
|
|
376
|
+
});
|
|
377
|
+
sample({
|
|
363
378
|
and: [{
|
|
364
379
|
source: {
|
|
365
|
-
activeRoutes:
|
|
366
|
-
query:
|
|
367
|
-
entered:
|
|
380
|
+
activeRoutes: $activeRoutes,
|
|
381
|
+
query: $query,
|
|
382
|
+
entered: $entered
|
|
368
383
|
},
|
|
369
|
-
filter: (
|
|
384
|
+
filter: (_ref5) => {
|
|
370
385
|
let {
|
|
371
|
-
activeRoutes
|
|
372
|
-
query
|
|
373
|
-
entered:
|
|
374
|
-
} =
|
|
375
|
-
return
|
|
386
|
+
activeRoutes,
|
|
387
|
+
query,
|
|
388
|
+
entered: entered2
|
|
389
|
+
} = _ref5;
|
|
390
|
+
return entered2 && !((!forRoutes || isForRouteActive(forRoutes, activeRoutes)) && isHaveValidParams(query, parameters2));
|
|
376
391
|
},
|
|
377
|
-
target: [
|
|
378
|
-
}), u.prepend(() => !1)]
|
|
392
|
+
target: [exited.prepend(() => void 0), changeEntered.prepend(() => false)]
|
|
379
393
|
}],
|
|
380
394
|
or: {
|
|
381
|
-
sid: "-
|
|
395
|
+
sid: "-fvsmmh"
|
|
382
396
|
}
|
|
383
|
-
})
|
|
397
|
+
});
|
|
398
|
+
sample({
|
|
384
399
|
and: [{
|
|
385
|
-
clock:
|
|
386
|
-
source:
|
|
387
|
-
fn: (
|
|
388
|
-
if (
|
|
389
|
-
const
|
|
390
|
-
for (const
|
|
391
|
-
|
|
400
|
+
clock: exit,
|
|
401
|
+
source: $query,
|
|
402
|
+
fn: (query, payload) => {
|
|
403
|
+
if (payload && payload.ignoreParams) {
|
|
404
|
+
const copy = {};
|
|
405
|
+
for (const key of payload.ignoreParams) {
|
|
406
|
+
if (query[key]) {
|
|
407
|
+
copy[key] = query[key];
|
|
408
|
+
}
|
|
409
|
+
}
|
|
392
410
|
return {
|
|
393
|
-
query:
|
|
411
|
+
query: copy
|
|
394
412
|
};
|
|
395
413
|
}
|
|
396
414
|
return {
|
|
397
415
|
query: {}
|
|
398
416
|
};
|
|
399
417
|
},
|
|
400
|
-
target:
|
|
418
|
+
target: navigate
|
|
401
419
|
}],
|
|
402
420
|
or: {
|
|
403
|
-
sid: "-
|
|
421
|
+
sid: "-f105e9"
|
|
404
422
|
}
|
|
405
|
-
})
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
423
|
+
});
|
|
424
|
+
return {
|
|
425
|
+
entered,
|
|
426
|
+
exited,
|
|
427
|
+
exit
|
|
409
428
|
};
|
|
410
429
|
};
|
|
411
430
|
}
|
|
412
|
-
function
|
|
413
|
-
return (
|
|
414
|
-
const
|
|
415
|
-
let
|
|
416
|
-
function
|
|
417
|
-
|
|
431
|
+
function prepareParser(tokens) {
|
|
432
|
+
return (input) => {
|
|
433
|
+
const rawTokens = input.split("/").map((part) => part.trim()).filter((part) => part !== "");
|
|
434
|
+
let params = null;
|
|
435
|
+
function setKey(key, value) {
|
|
436
|
+
if (!params) {
|
|
437
|
+
params = {};
|
|
438
|
+
}
|
|
439
|
+
params[key] = value;
|
|
418
440
|
}
|
|
419
|
-
if (
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
441
|
+
if (tokens.length === 0) {
|
|
442
|
+
return rawTokens.length === 0 ? {
|
|
443
|
+
path: input,
|
|
444
|
+
params: null
|
|
445
|
+
} : null;
|
|
446
|
+
}
|
|
447
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
448
|
+
const token = tokens[i];
|
|
449
|
+
switch (token.type) {
|
|
426
450
|
case "const": {
|
|
427
|
-
if (
|
|
451
|
+
if (token.name !== rawTokens.shift()) {
|
|
452
|
+
return null;
|
|
453
|
+
}
|
|
428
454
|
continue;
|
|
429
455
|
}
|
|
430
456
|
case "parameter": {
|
|
431
457
|
const {
|
|
432
|
-
arrayProps
|
|
433
|
-
genericProps
|
|
434
|
-
required
|
|
435
|
-
} =
|
|
436
|
-
if (
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
458
|
+
arrayProps,
|
|
459
|
+
genericProps,
|
|
460
|
+
required
|
|
461
|
+
} = token.payload;
|
|
462
|
+
if (arrayProps) {
|
|
463
|
+
const array = [];
|
|
464
|
+
let rawToken2;
|
|
465
|
+
while (true) {
|
|
466
|
+
rawToken2 = rawTokens.shift();
|
|
467
|
+
if (!rawToken2) {
|
|
468
|
+
break;
|
|
469
|
+
}
|
|
470
|
+
switch (genericProps == null ? void 0 : genericProps.type) {
|
|
444
471
|
case "number": {
|
|
445
|
-
if (isNaN(+
|
|
446
|
-
|
|
472
|
+
if (isNaN(+rawToken2)) {
|
|
473
|
+
return null;
|
|
474
|
+
}
|
|
475
|
+
array.push(+rawToken2);
|
|
447
476
|
break;
|
|
448
477
|
}
|
|
449
478
|
case "union": {
|
|
450
|
-
if (!
|
|
451
|
-
|
|
479
|
+
if (!genericProps.items.includes(rawToken2)) {
|
|
480
|
+
return null;
|
|
481
|
+
}
|
|
482
|
+
array.push(rawToken2);
|
|
452
483
|
break;
|
|
453
484
|
}
|
|
454
485
|
default: {
|
|
455
|
-
|
|
486
|
+
array.push(rawToken2);
|
|
456
487
|
break;
|
|
457
488
|
}
|
|
458
489
|
}
|
|
459
|
-
if (
|
|
490
|
+
if (array.length >= (arrayProps.max ?? Infinity)) {
|
|
491
|
+
break;
|
|
492
|
+
}
|
|
460
493
|
}
|
|
461
|
-
if (
|
|
462
|
-
|
|
494
|
+
if (array.length < (arrayProps.min ?? 0)) {
|
|
495
|
+
return null;
|
|
496
|
+
}
|
|
497
|
+
if (rawTokens.length > 0 && !tokens[i + 1]) {
|
|
498
|
+
return null;
|
|
499
|
+
}
|
|
500
|
+
setKey(token.name, array);
|
|
463
501
|
break;
|
|
464
502
|
}
|
|
465
|
-
const
|
|
466
|
-
if (
|
|
467
|
-
|
|
468
|
-
|
|
503
|
+
const rawToken = rawTokens.shift();
|
|
504
|
+
if (required && !rawToken) {
|
|
505
|
+
return null;
|
|
506
|
+
}
|
|
507
|
+
if (!rawToken) {
|
|
508
|
+
setKey(token.name, void 0);
|
|
469
509
|
continue;
|
|
470
510
|
}
|
|
471
|
-
switch (
|
|
511
|
+
switch (genericProps == null ? void 0 : genericProps.type) {
|
|
472
512
|
case "number": {
|
|
473
|
-
if (isNaN(+
|
|
474
|
-
|
|
513
|
+
if (isNaN(+rawToken)) {
|
|
514
|
+
return null;
|
|
515
|
+
}
|
|
516
|
+
setKey(token.name, +rawToken);
|
|
475
517
|
break;
|
|
476
518
|
}
|
|
477
519
|
case "union": {
|
|
478
|
-
if (!
|
|
479
|
-
|
|
520
|
+
if (!genericProps.items.includes(rawToken)) {
|
|
521
|
+
return null;
|
|
522
|
+
}
|
|
523
|
+
setKey(token.name, rawToken);
|
|
480
524
|
break;
|
|
481
525
|
}
|
|
482
526
|
default: {
|
|
483
|
-
|
|
527
|
+
setKey(token.name, rawToken);
|
|
484
528
|
break;
|
|
485
529
|
}
|
|
486
530
|
}
|
|
487
531
|
}
|
|
488
532
|
}
|
|
489
533
|
}
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
534
|
+
if (rawTokens.length > 0) {
|
|
535
|
+
return null;
|
|
536
|
+
}
|
|
537
|
+
return {
|
|
538
|
+
path: input,
|
|
539
|
+
params
|
|
493
540
|
};
|
|
494
541
|
};
|
|
495
542
|
}
|
|
496
|
-
function
|
|
497
|
-
if (!
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
543
|
+
function getTokenParameters(params) {
|
|
544
|
+
if (!params) {
|
|
545
|
+
return null;
|
|
546
|
+
}
|
|
547
|
+
const name = params[1];
|
|
548
|
+
let genericProps;
|
|
549
|
+
let arrayProps;
|
|
550
|
+
let modificator;
|
|
551
|
+
for (const parameter of params.slice(2)) {
|
|
552
|
+
if (!parameter) {
|
|
503
553
|
continue;
|
|
504
554
|
}
|
|
505
|
-
if (
|
|
506
|
-
|
|
555
|
+
if (parameter.includes("<")) {
|
|
556
|
+
genericProps = parameter.replaceAll(/\s/g, "").replace("<", "").replace(">", "");
|
|
557
|
+
continue;
|
|
558
|
+
}
|
|
559
|
+
if (parameter.includes("{")) {
|
|
560
|
+
arrayProps = parameter.replace("{", "").replace("}", "").split(",").map((item) => parseInt(item));
|
|
561
|
+
}
|
|
562
|
+
if (["*", "?", "+"].includes(parameter)) {
|
|
563
|
+
modificator = parameter;
|
|
507
564
|
continue;
|
|
508
565
|
}
|
|
509
566
|
}
|
|
510
567
|
return {
|
|
511
|
-
name
|
|
512
|
-
genericProps
|
|
513
|
-
arrayProps
|
|
514
|
-
modificator
|
|
568
|
+
name,
|
|
569
|
+
genericProps,
|
|
570
|
+
arrayProps,
|
|
571
|
+
modificator
|
|
515
572
|
};
|
|
516
573
|
}
|
|
517
|
-
function
|
|
518
|
-
return (
|
|
519
|
-
const
|
|
520
|
-
if (
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
574
|
+
function prepareBuilder(tokens) {
|
|
575
|
+
return (params) => {
|
|
576
|
+
const result = [];
|
|
577
|
+
if (tokens.length === 0) {
|
|
578
|
+
return "/";
|
|
579
|
+
}
|
|
580
|
+
for (const token of tokens) {
|
|
581
|
+
switch (token.type) {
|
|
582
|
+
case "const": {
|
|
583
|
+
result.push(token.name);
|
|
584
|
+
break;
|
|
585
|
+
}
|
|
586
|
+
case "parameter": {
|
|
587
|
+
if (!params[token.name]) {
|
|
588
|
+
continue;
|
|
589
|
+
}
|
|
590
|
+
if (Array.isArray(params[token.name])) {
|
|
591
|
+
for (const param of params[token.name]) {
|
|
592
|
+
result.push(param.toString());
|
|
593
|
+
}
|
|
594
|
+
} else {
|
|
595
|
+
result.push(params[token.name].toString());
|
|
596
|
+
}
|
|
597
|
+
break;
|
|
598
|
+
}
|
|
531
599
|
}
|
|
532
600
|
}
|
|
533
|
-
return
|
|
601
|
+
return `/${result.join("/")}`;
|
|
534
602
|
};
|
|
535
603
|
}
|
|
536
|
-
function
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
var r = arguments[t] != null ? arguments[t] : {};
|
|
549
|
-
t % 2 ? q(Object(r), !0).forEach(function(n) {
|
|
550
|
-
be(e, n, r[n]);
|
|
551
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : q(Object(r)).forEach(function(n) {
|
|
552
|
-
Object.defineProperty(e, n, Object.getOwnPropertyDescriptor(r, n));
|
|
553
|
-
});
|
|
554
|
-
}
|
|
555
|
-
return e;
|
|
556
|
-
}
|
|
557
|
-
function be(e, t, r) {
|
|
558
|
-
return (t = ge(t)) in e ? Object.defineProperty(e, t, {
|
|
559
|
-
value: r,
|
|
560
|
-
enumerable: !0,
|
|
561
|
-
configurable: !0,
|
|
562
|
-
writable: !0
|
|
563
|
-
}) : e[t] = r, e;
|
|
564
|
-
}
|
|
565
|
-
function ge(e) {
|
|
566
|
-
var t = he(e, "string");
|
|
567
|
-
return typeof t == "symbol" ? t : t + "";
|
|
568
|
-
}
|
|
569
|
-
function he(e, t) {
|
|
570
|
-
if (typeof e != "object" || !e) return e;
|
|
571
|
-
var r = e[Symbol.toPrimitive];
|
|
572
|
-
if (r !== void 0) {
|
|
573
|
-
var n = r.call(e, t);
|
|
574
|
-
if (typeof n != "object") return n;
|
|
575
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
576
|
-
}
|
|
577
|
-
return (t === "string" ? String : Number)(e);
|
|
578
|
-
}
|
|
579
|
-
function Oe(e) {
|
|
580
|
-
const t = [], r = /:(\w+)(<[\w|]+>)?({\d+\,\d+})?([+*?])?/, n = e.split("/").filter(Boolean);
|
|
581
|
-
for (let a = 0; a < n.length; a++) {
|
|
582
|
-
const o = n[a];
|
|
583
|
-
if (!o) continue;
|
|
584
|
-
const i = me(o.match(r));
|
|
585
|
-
if (!i) {
|
|
586
|
-
t.push({
|
|
604
|
+
function compile(path) {
|
|
605
|
+
const tokens = [];
|
|
606
|
+
const regexp = /:(\w+)(<[\s?\w|]+>)?({\d+\,\d+})?([+*?])?/;
|
|
607
|
+
const parsedTokens = path.split("/").filter(Boolean);
|
|
608
|
+
for (let i = 0; i < parsedTokens.length; i++) {
|
|
609
|
+
const parsedToken = parsedTokens[i];
|
|
610
|
+
if (!parsedToken) {
|
|
611
|
+
continue;
|
|
612
|
+
}
|
|
613
|
+
const parameters2 = getTokenParameters(parsedToken.match(regexp));
|
|
614
|
+
if (!parameters2) {
|
|
615
|
+
tokens.push({
|
|
587
616
|
type: "const",
|
|
588
|
-
name:
|
|
617
|
+
name: parsedToken,
|
|
589
618
|
payload: void 0
|
|
590
619
|
});
|
|
591
620
|
continue;
|
|
592
621
|
}
|
|
593
622
|
const {
|
|
594
|
-
arrayProps
|
|
595
|
-
genericProps
|
|
596
|
-
modificator
|
|
597
|
-
name
|
|
598
|
-
} =
|
|
599
|
-
if (!
|
|
600
|
-
|
|
623
|
+
arrayProps,
|
|
624
|
+
genericProps,
|
|
625
|
+
modificator,
|
|
626
|
+
name
|
|
627
|
+
} = parameters2;
|
|
628
|
+
if (!name) {
|
|
629
|
+
throw new Error(`Invalid path: "${path}". Name for argument must be provided`);
|
|
630
|
+
}
|
|
631
|
+
const token = {
|
|
601
632
|
type: "parameter",
|
|
602
|
-
name
|
|
633
|
+
name,
|
|
603
634
|
payload: {
|
|
604
|
-
required:
|
|
635
|
+
required: true
|
|
605
636
|
}
|
|
606
637
|
};
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
638
|
+
if (genericProps && genericProps === "number") {
|
|
639
|
+
token.payload.genericProps = {
|
|
640
|
+
type: "number"
|
|
641
|
+
};
|
|
642
|
+
}
|
|
643
|
+
if (genericProps && genericProps.includes("|")) {
|
|
644
|
+
token.payload.genericProps = {
|
|
645
|
+
type: "union",
|
|
646
|
+
items: genericProps.split("|")
|
|
647
|
+
};
|
|
648
|
+
}
|
|
649
|
+
switch (modificator) {
|
|
613
650
|
case "*": {
|
|
614
|
-
|
|
651
|
+
token.payload.arrayProps = {};
|
|
615
652
|
break;
|
|
616
653
|
}
|
|
617
654
|
case "+": {
|
|
618
|
-
|
|
655
|
+
token.payload.arrayProps = {
|
|
619
656
|
min: 1
|
|
620
657
|
};
|
|
621
658
|
break;
|
|
622
659
|
}
|
|
623
660
|
case "?": {
|
|
624
|
-
|
|
661
|
+
token.payload.required = false;
|
|
625
662
|
break;
|
|
626
663
|
}
|
|
627
664
|
}
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
665
|
+
if (arrayProps) {
|
|
666
|
+
token.payload.arrayProps = {
|
|
667
|
+
...token.payload.arrayProps,
|
|
668
|
+
min: arrayProps[0],
|
|
669
|
+
max: arrayProps[1]
|
|
670
|
+
};
|
|
671
|
+
}
|
|
672
|
+
tokens.push(token);
|
|
632
673
|
}
|
|
633
674
|
return {
|
|
634
675
|
/**
|
|
635
676
|
* @param input Input path
|
|
636
677
|
* @returns `{ path: string; params: Params }` | `null`
|
|
637
678
|
*/
|
|
638
|
-
parse:
|
|
679
|
+
parse: prepareParser(tokens),
|
|
639
680
|
/**
|
|
640
681
|
* @param params Route parameters
|
|
641
682
|
* @returns string
|
|
642
683
|
*/
|
|
643
|
-
build:
|
|
644
|
-
};
|
|
645
|
-
}
|
|
646
|
-
const M = "%[a-f0-9]{2}", B = new RegExp("(" + M + ")|([^%]+?)", "gi"), _ = new RegExp("(" + M + ")+", "gi");
|
|
647
|
-
function A(e, t) {
|
|
648
|
-
try {
|
|
649
|
-
return [decodeURIComponent(e.join(""))];
|
|
650
|
-
} catch {
|
|
651
|
-
}
|
|
652
|
-
if (e.length === 1)
|
|
653
|
-
return e;
|
|
654
|
-
t = t || 1;
|
|
655
|
-
const r = e.slice(0, t), n = e.slice(t);
|
|
656
|
-
return Array.prototype.concat.call([], A(r), A(n));
|
|
657
|
-
}
|
|
658
|
-
function we(e) {
|
|
659
|
-
try {
|
|
660
|
-
return decodeURIComponent(e);
|
|
661
|
-
} catch {
|
|
662
|
-
let t = e.match(B) || [];
|
|
663
|
-
for (let r = 1; r < t.length; r++)
|
|
664
|
-
e = A(t, r).join(""), t = e.match(B) || [];
|
|
665
|
-
return e;
|
|
666
|
-
}
|
|
667
|
-
}
|
|
668
|
-
function Fe(e) {
|
|
669
|
-
const t = {
|
|
670
|
-
"%FE%FF": "��",
|
|
671
|
-
"%FF%FE": "��"
|
|
684
|
+
build: prepareBuilder(tokens)
|
|
672
685
|
};
|
|
673
|
-
let r = _.exec(e);
|
|
674
|
-
for (; r; ) {
|
|
675
|
-
try {
|
|
676
|
-
t[r[0]] = decodeURIComponent(r[0]);
|
|
677
|
-
} catch {
|
|
678
|
-
const a = we(r[0]);
|
|
679
|
-
a !== r[0] && (t[r[0]] = a);
|
|
680
|
-
}
|
|
681
|
-
r = _.exec(e);
|
|
682
|
-
}
|
|
683
|
-
t["%C2"] = "�";
|
|
684
|
-
const n = Object.keys(t);
|
|
685
|
-
for (const a of n)
|
|
686
|
-
e = e.replace(new RegExp(a, "g"), t[a]);
|
|
687
|
-
return e;
|
|
688
|
-
}
|
|
689
|
-
function je(e) {
|
|
690
|
-
if (typeof e != "string")
|
|
691
|
-
throw new TypeError("Expected `encodedURI` to be of type `string`, got `" + typeof e + "`");
|
|
692
|
-
try {
|
|
693
|
-
return decodeURIComponent(e);
|
|
694
|
-
} catch {
|
|
695
|
-
return Fe(e);
|
|
696
|
-
}
|
|
697
|
-
}
|
|
698
|
-
function ke(e, t) {
|
|
699
|
-
const r = {};
|
|
700
|
-
if (Array.isArray(t))
|
|
701
|
-
for (const n of t) {
|
|
702
|
-
const a = Object.getOwnPropertyDescriptor(e, n);
|
|
703
|
-
a != null && a.enumerable && Object.defineProperty(r, n, a);
|
|
704
|
-
}
|
|
705
|
-
else
|
|
706
|
-
for (const n of Reflect.ownKeys(e)) {
|
|
707
|
-
const a = Object.getOwnPropertyDescriptor(e, n);
|
|
708
|
-
if (a.enumerable) {
|
|
709
|
-
const o = e[n];
|
|
710
|
-
t(n, o, e) && Object.defineProperty(r, n, a);
|
|
711
|
-
}
|
|
712
|
-
}
|
|
713
|
-
return r;
|
|
714
686
|
}
|
|
715
|
-
function
|
|
716
|
-
|
|
717
|
-
throw new TypeError("Expected the arguments to be of type `string`");
|
|
718
|
-
if (e === "" || t === "")
|
|
719
|
-
return [];
|
|
720
|
-
const r = e.indexOf(t);
|
|
721
|
-
return r === -1 ? [] : [e.slice(0, r), e.slice(r + t.length)];
|
|
722
|
-
}
|
|
723
|
-
const Se = (e) => e == null, Pe = (e) => encodeURIComponent(e).replaceAll(/[!'()*]/g, (t) => `%${t.charCodeAt(0).toString(16).toUpperCase()}`), E = Symbol("encodeFragmentIdentifier");
|
|
724
|
-
function ve(e) {
|
|
725
|
-
switch (e.arrayFormat) {
|
|
726
|
-
case "index":
|
|
727
|
-
return (t) => (r, n) => {
|
|
728
|
-
const a = r.length;
|
|
729
|
-
return n === void 0 || e.skipNull && n === null || e.skipEmptyString && n === "" ? r : n === null ? [...r, [O(t, e), "[", a, "]"].join("")] : [...r, [O(t, e), "[", O(a, e), "]=", O(n, e)].join("")];
|
|
730
|
-
};
|
|
731
|
-
case "bracket":
|
|
732
|
-
return (t) => (r, n) => n === void 0 || e.skipNull && n === null || e.skipEmptyString && n === "" ? r : n === null ? [...r, [O(t, e), "[]"].join("")] : [...r, [O(t, e), "[]=", O(n, e)].join("")];
|
|
733
|
-
case "colon-list-separator":
|
|
734
|
-
return (t) => (r, n) => n === void 0 || e.skipNull && n === null || e.skipEmptyString && n === "" ? r : n === null ? [...r, [O(t, e), ":list="].join("")] : [...r, [O(t, e), ":list=", O(n, e)].join("")];
|
|
735
|
-
case "comma":
|
|
736
|
-
case "separator":
|
|
737
|
-
case "bracket-separator": {
|
|
738
|
-
const t = e.arrayFormat === "bracket-separator" ? "[]=" : "=";
|
|
739
|
-
return (r) => (n, a) => a === void 0 || e.skipNull && a === null || e.skipEmptyString && a === "" ? n : (a = a === null ? "" : a, n.length === 0 ? [[O(r, e), t, O(a, e)].join("")] : [[n, O(a, e)].join(e.arrayFormatSeparator)]);
|
|
740
|
-
}
|
|
741
|
-
default:
|
|
742
|
-
return (t) => (r, n) => n === void 0 || e.skipNull && n === null || e.skipEmptyString && n === "" ? r : n === null ? [...r, O(t, e)] : [...r, [O(t, e), "=", O(n, e)].join("")];
|
|
743
|
-
}
|
|
744
|
-
}
|
|
745
|
-
function xe(e) {
|
|
746
|
-
let t;
|
|
747
|
-
switch (e.arrayFormat) {
|
|
748
|
-
case "index":
|
|
749
|
-
return (r, n, a) => {
|
|
750
|
-
if (t = /\[(\d*)]$/.exec(r), r = r.replace(/\[\d*]$/, ""), !t) {
|
|
751
|
-
a[r] = n;
|
|
752
|
-
return;
|
|
753
|
-
}
|
|
754
|
-
a[r] === void 0 && (a[r] = {}), a[r][t[1]] = n;
|
|
755
|
-
};
|
|
756
|
-
case "bracket":
|
|
757
|
-
return (r, n, a) => {
|
|
758
|
-
if (t = /(\[])$/.exec(r), r = r.replace(/\[]$/, ""), !t) {
|
|
759
|
-
a[r] = n;
|
|
760
|
-
return;
|
|
761
|
-
}
|
|
762
|
-
if (a[r] === void 0) {
|
|
763
|
-
a[r] = [n];
|
|
764
|
-
return;
|
|
765
|
-
}
|
|
766
|
-
a[r] = [...a[r], n];
|
|
767
|
-
};
|
|
768
|
-
case "colon-list-separator":
|
|
769
|
-
return (r, n, a) => {
|
|
770
|
-
if (t = /(:list)$/.exec(r), r = r.replace(/:list$/, ""), !t) {
|
|
771
|
-
a[r] = n;
|
|
772
|
-
return;
|
|
773
|
-
}
|
|
774
|
-
if (a[r] === void 0) {
|
|
775
|
-
a[r] = [n];
|
|
776
|
-
return;
|
|
777
|
-
}
|
|
778
|
-
a[r] = [...a[r], n];
|
|
779
|
-
};
|
|
780
|
-
case "comma":
|
|
781
|
-
case "separator":
|
|
782
|
-
return (r, n, a) => {
|
|
783
|
-
const o = typeof n == "string" && n.includes(e.arrayFormatSeparator), i = typeof n == "string" && !o && F(n, e).includes(e.arrayFormatSeparator);
|
|
784
|
-
n = i ? F(n, e) : n;
|
|
785
|
-
const s = o || i ? n.split(e.arrayFormatSeparator).map((c) => F(c, e)) : n === null ? n : F(n, e);
|
|
786
|
-
a[r] = s;
|
|
787
|
-
};
|
|
788
|
-
case "bracket-separator":
|
|
789
|
-
return (r, n, a) => {
|
|
790
|
-
const o = /(\[])$/.test(r);
|
|
791
|
-
if (r = r.replace(/\[]$/, ""), !o) {
|
|
792
|
-
a[r] = n && F(n, e);
|
|
793
|
-
return;
|
|
794
|
-
}
|
|
795
|
-
const i = n === null ? [] : F(n, e).split(e.arrayFormatSeparator);
|
|
796
|
-
if (a[r] === void 0) {
|
|
797
|
-
a[r] = i;
|
|
798
|
-
return;
|
|
799
|
-
}
|
|
800
|
-
a[r] = [...a[r], ...i];
|
|
801
|
-
};
|
|
802
|
-
default:
|
|
803
|
-
return (r, n, a) => {
|
|
804
|
-
if (a[r] === void 0) {
|
|
805
|
-
a[r] = n;
|
|
806
|
-
return;
|
|
807
|
-
}
|
|
808
|
-
a[r] = [...[a[r]].flat(), n];
|
|
809
|
-
};
|
|
810
|
-
}
|
|
811
|
-
}
|
|
812
|
-
function J(e) {
|
|
813
|
-
if (typeof e != "string" || e.length !== 1)
|
|
814
|
-
throw new TypeError("arrayFormatSeparator must be single character string");
|
|
815
|
-
}
|
|
816
|
-
function O(e, t) {
|
|
817
|
-
return t.encode ? t.strict ? Pe(e) : encodeURIComponent(e) : e;
|
|
818
|
-
}
|
|
819
|
-
function F(e, t) {
|
|
820
|
-
return t.decode ? je(e) : e;
|
|
821
|
-
}
|
|
822
|
-
function G(e) {
|
|
823
|
-
return Array.isArray(e) ? e.sort() : typeof e == "object" ? G(Object.keys(e)).sort((t, r) => Number(t) - Number(r)).map((t) => e[t]) : e;
|
|
824
|
-
}
|
|
825
|
-
function W(e) {
|
|
826
|
-
const t = e.indexOf("#");
|
|
827
|
-
return t !== -1 && (e = e.slice(0, t)), e;
|
|
828
|
-
}
|
|
829
|
-
function $e(e) {
|
|
830
|
-
let t = "";
|
|
831
|
-
const r = e.indexOf("#");
|
|
832
|
-
return r !== -1 && (t = e.slice(r)), t;
|
|
833
|
-
}
|
|
834
|
-
function T(e, t, r) {
|
|
835
|
-
return r === "string" && typeof e == "string" ? e : typeof r == "function" && typeof e == "string" ? r(e) : t.parseBooleans && e !== null && (e.toLowerCase() === "true" || e.toLowerCase() === "false") ? e.toLowerCase() === "true" : r === "number" && !Number.isNaN(Number(e)) && typeof e == "string" && e.trim() !== "" || t.parseNumbers && !Number.isNaN(Number(e)) && typeof e == "string" && e.trim() !== "" ? Number(e) : e;
|
|
836
|
-
}
|
|
837
|
-
function R(e) {
|
|
838
|
-
e = W(e);
|
|
839
|
-
const t = e.indexOf("?");
|
|
840
|
-
return t === -1 ? "" : e.slice(t + 1);
|
|
841
|
-
}
|
|
842
|
-
function I(e, t) {
|
|
843
|
-
t = {
|
|
844
|
-
decode: !0,
|
|
845
|
-
sort: !0,
|
|
846
|
-
arrayFormat: "none",
|
|
847
|
-
arrayFormatSeparator: ",",
|
|
848
|
-
parseNumbers: !1,
|
|
849
|
-
parseBooleans: !1,
|
|
850
|
-
types: /* @__PURE__ */ Object.create(null),
|
|
851
|
-
...t
|
|
852
|
-
}, J(t.arrayFormatSeparator);
|
|
853
|
-
const r = xe(t), n = /* @__PURE__ */ Object.create(null);
|
|
854
|
-
if (typeof e != "string" || (e = e.trim().replace(/^[?#&]/, ""), !e))
|
|
855
|
-
return n;
|
|
856
|
-
for (const a of e.split("&")) {
|
|
857
|
-
if (a === "")
|
|
858
|
-
continue;
|
|
859
|
-
const o = t.decode ? a.replaceAll("+", " ") : a;
|
|
860
|
-
let [i, s] = Q(o, "=");
|
|
861
|
-
i === void 0 && (i = o), s = s === void 0 ? null : ["comma", "separator", "bracket-separator"].includes(t.arrayFormat) ? s : F(s, t), r(F(i, t), s, n);
|
|
862
|
-
}
|
|
863
|
-
for (const [a, o] of Object.entries(n))
|
|
864
|
-
if (typeof o == "object" && o !== null && t.types[a] !== "string")
|
|
865
|
-
for (const [i, s] of Object.entries(o)) {
|
|
866
|
-
const c = t.types[a] ? t.types[a].replace("[]", "") : void 0;
|
|
867
|
-
o[i] = T(s, t, c);
|
|
868
|
-
}
|
|
869
|
-
else typeof o == "object" && o !== null && t.types[a] === "string" ? n[a] = Object.values(o).join(t.arrayFormatSeparator) : n[a] = T(o, t, t.types[a]);
|
|
870
|
-
return t.sort === !1 ? n : (t.sort === !0 ? Object.keys(n).sort() : Object.keys(n).sort(t.sort)).reduce((a, o) => {
|
|
871
|
-
const i = n[o];
|
|
872
|
-
return a[o] = i && typeof i == "object" && !Array.isArray(i) ? G(i) : i, a;
|
|
873
|
-
}, /* @__PURE__ */ Object.create(null));
|
|
874
|
-
}
|
|
875
|
-
function X(e, t) {
|
|
876
|
-
if (!e)
|
|
877
|
-
return "";
|
|
878
|
-
t = {
|
|
879
|
-
encode: !0,
|
|
880
|
-
strict: !0,
|
|
881
|
-
arrayFormat: "none",
|
|
882
|
-
arrayFormatSeparator: ",",
|
|
883
|
-
...t
|
|
884
|
-
}, J(t.arrayFormatSeparator);
|
|
885
|
-
const r = (i) => t.skipNull && Se(e[i]) || t.skipEmptyString && e[i] === "", n = ve(t), a = {};
|
|
886
|
-
for (const [i, s] of Object.entries(e))
|
|
887
|
-
r(i) || (a[i] = s);
|
|
888
|
-
const o = Object.keys(a);
|
|
889
|
-
return t.sort !== !1 && o.sort(t.sort), o.map((i) => {
|
|
890
|
-
const s = e[i];
|
|
891
|
-
return s === void 0 ? "" : s === null ? O(i, t) : Array.isArray(s) ? s.length === 0 && t.arrayFormat === "bracket-separator" ? O(i, t) + "[]" : s.reduce(n(i), []).join("&") : O(i, t) + "=" + O(s, t);
|
|
892
|
-
}).filter((i) => i.length > 0).join("&");
|
|
893
|
-
}
|
|
894
|
-
function Y(e, t) {
|
|
895
|
-
var a;
|
|
896
|
-
t = {
|
|
897
|
-
decode: !0,
|
|
898
|
-
...t
|
|
899
|
-
};
|
|
900
|
-
let [r, n] = Q(e, "#");
|
|
901
|
-
return r === void 0 && (r = e), {
|
|
902
|
-
url: ((a = r == null ? void 0 : r.split("?")) == null ? void 0 : a[0]) ?? "",
|
|
903
|
-
query: I(R(e), t),
|
|
904
|
-
...t && t.parseFragmentIdentifier && n ? {
|
|
905
|
-
fragmentIdentifier: F(n, t)
|
|
906
|
-
} : {}
|
|
907
|
-
};
|
|
908
|
-
}
|
|
909
|
-
function Z(e, t) {
|
|
910
|
-
t = {
|
|
911
|
-
encode: !0,
|
|
912
|
-
strict: !0,
|
|
913
|
-
[E]: !0,
|
|
914
|
-
...t
|
|
915
|
-
};
|
|
916
|
-
const r = W(e.url).split("?")[0] || "", n = R(e.url), a = {
|
|
917
|
-
...I(n, {
|
|
918
|
-
sort: !1
|
|
919
|
-
}),
|
|
920
|
-
...e.query
|
|
921
|
-
};
|
|
922
|
-
let o = X(a, t);
|
|
923
|
-
o && (o = `?${o}`);
|
|
924
|
-
let i = $e(e.url);
|
|
925
|
-
if (typeof e.fragmentIdentifier == "string") {
|
|
926
|
-
const s = new URL(r);
|
|
927
|
-
s.hash = e.fragmentIdentifier, i = t[E] ? s.hash : `#${e.fragmentIdentifier}`;
|
|
928
|
-
}
|
|
929
|
-
return `${r}${o}${i}`;
|
|
930
|
-
}
|
|
931
|
-
function ee(e, t, r) {
|
|
932
|
-
r = {
|
|
933
|
-
parseFragmentIdentifier: !0,
|
|
934
|
-
[E]: !1,
|
|
935
|
-
...r
|
|
936
|
-
};
|
|
937
|
-
const {
|
|
938
|
-
url: n,
|
|
939
|
-
query: a,
|
|
940
|
-
fragmentIdentifier: o
|
|
941
|
-
} = Y(e, r);
|
|
942
|
-
return Z({
|
|
943
|
-
url: n,
|
|
944
|
-
query: ke(a, t),
|
|
945
|
-
fragmentIdentifier: o
|
|
946
|
-
}, r);
|
|
947
|
-
}
|
|
948
|
-
function Ne(e, t, r) {
|
|
949
|
-
const n = Array.isArray(t) ? (a) => !t.includes(a) : (a, o) => !t(a, o);
|
|
950
|
-
return ee(e, n, r);
|
|
951
|
-
}
|
|
952
|
-
const x = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
953
|
-
__proto__: null,
|
|
954
|
-
exclude: Ne,
|
|
955
|
-
extract: R,
|
|
956
|
-
parse: I,
|
|
957
|
-
parseUrl: Y,
|
|
958
|
-
pick: ee,
|
|
959
|
-
stringify: X,
|
|
960
|
-
stringifyUrl: Z
|
|
961
|
-
}, Symbol.toStringTag, { value: "Module" }));
|
|
962
|
-
function H(e, t) {
|
|
963
|
-
var r = Object.keys(e);
|
|
964
|
-
if (Object.getOwnPropertySymbols) {
|
|
965
|
-
var n = Object.getOwnPropertySymbols(e);
|
|
966
|
-
t && (n = n.filter(function(a) {
|
|
967
|
-
return Object.getOwnPropertyDescriptor(e, a).enumerable;
|
|
968
|
-
})), r.push.apply(r, n);
|
|
969
|
-
}
|
|
970
|
-
return r;
|
|
971
|
-
}
|
|
972
|
-
function $(e) {
|
|
973
|
-
for (var t = 1; t < arguments.length; t++) {
|
|
974
|
-
var r = arguments[t] != null ? arguments[t] : {};
|
|
975
|
-
t % 2 ? H(Object(r), !0).forEach(function(n) {
|
|
976
|
-
Ae(e, n, r[n]);
|
|
977
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : H(Object(r)).forEach(function(n) {
|
|
978
|
-
Object.defineProperty(e, n, Object.getOwnPropertyDescriptor(r, n));
|
|
979
|
-
});
|
|
980
|
-
}
|
|
981
|
-
return e;
|
|
982
|
-
}
|
|
983
|
-
function Ae(e, t, r) {
|
|
984
|
-
return (t = Ee(t)) in e ? Object.defineProperty(e, t, { value: r, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = r, e;
|
|
985
|
-
}
|
|
986
|
-
function Ee(e) {
|
|
987
|
-
var t = Re(e, "string");
|
|
988
|
-
return typeof t == "symbol" ? t : t + "";
|
|
989
|
-
}
|
|
990
|
-
function Re(e, t) {
|
|
991
|
-
if (typeof e != "object" || !e) return e;
|
|
992
|
-
var r = e[Symbol.toPrimitive];
|
|
993
|
-
if (r !== void 0) {
|
|
994
|
-
var n = r.call(e, t);
|
|
995
|
-
if (typeof n != "object") return n;
|
|
996
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
997
|
-
}
|
|
998
|
-
return (t === "string" ? String : Number)(e);
|
|
999
|
-
}
|
|
1000
|
-
function Ie() {
|
|
1001
|
-
const e = k(null, {
|
|
687
|
+
function createRouterControls() {
|
|
688
|
+
const $history = createStore(null, {
|
|
1002
689
|
and: {
|
|
1003
690
|
serialize: "ignore"
|
|
1004
691
|
},
|
|
1005
692
|
name: "$history",
|
|
1006
693
|
sid: "-ld7lzl"
|
|
1007
|
-
})
|
|
694
|
+
});
|
|
695
|
+
const $locationState = createStore({
|
|
1008
696
|
query: {},
|
|
1009
697
|
path: null
|
|
1010
698
|
}, {
|
|
1011
699
|
name: "$locationState",
|
|
1012
700
|
sid: "-4u3w85"
|
|
1013
|
-
})
|
|
701
|
+
});
|
|
702
|
+
const $query = $locationState.map((state) => state.query);
|
|
703
|
+
const $path = $locationState.map((state) => state.path);
|
|
704
|
+
const setHistory = createEvent({
|
|
1014
705
|
name: "setHistory",
|
|
1015
706
|
sid: "-ormmkk"
|
|
1016
|
-
})
|
|
707
|
+
});
|
|
708
|
+
const navigate = createEvent({
|
|
1017
709
|
name: "navigate",
|
|
1018
710
|
sid: "tawqep"
|
|
1019
|
-
})
|
|
711
|
+
});
|
|
712
|
+
const back = createEvent({
|
|
1020
713
|
name: "back",
|
|
1021
714
|
sid: "bxy8rt"
|
|
1022
|
-
})
|
|
715
|
+
});
|
|
716
|
+
const forward = createEvent({
|
|
1023
717
|
name: "forward",
|
|
1024
718
|
sid: "-bpmzb1"
|
|
1025
|
-
})
|
|
719
|
+
});
|
|
720
|
+
const locationUpdated = createEvent({
|
|
1026
721
|
name: "locationUpdated",
|
|
1027
722
|
sid: "lkzldx"
|
|
1028
|
-
})
|
|
723
|
+
});
|
|
724
|
+
const navigateFx = attach({
|
|
1029
725
|
and: {
|
|
1030
|
-
source:
|
|
1031
|
-
effect: (
|
|
726
|
+
source: $history,
|
|
727
|
+
effect: (history, _ref) => {
|
|
1032
728
|
let {
|
|
1033
|
-
path
|
|
1034
|
-
query
|
|
1035
|
-
replace
|
|
1036
|
-
} =
|
|
1037
|
-
if (!
|
|
729
|
+
path,
|
|
730
|
+
query,
|
|
731
|
+
replace
|
|
732
|
+
} = _ref;
|
|
733
|
+
if (!history) {
|
|
1038
734
|
throw new Error("history not found");
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
735
|
+
}
|
|
736
|
+
const payload = {
|
|
737
|
+
pathname: path,
|
|
738
|
+
search: `?${queryString.stringify(query)}`
|
|
1042
739
|
};
|
|
1043
|
-
|
|
740
|
+
if (replace) {
|
|
741
|
+
history.replace(payload);
|
|
742
|
+
} else {
|
|
743
|
+
history.push(payload);
|
|
744
|
+
}
|
|
1044
745
|
}
|
|
1045
746
|
},
|
|
1046
747
|
or: {
|
|
1047
748
|
name: "navigateFx",
|
|
1048
749
|
sid: "-ov1xn7"
|
|
1049
750
|
}
|
|
1050
|
-
})
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
751
|
+
});
|
|
752
|
+
const subscribeHistoryFx = createEffect((history) => {
|
|
753
|
+
const historyLocationUpdated = scopeBind(locationUpdated);
|
|
754
|
+
historyLocationUpdated({
|
|
755
|
+
pathname: history.location.pathname,
|
|
756
|
+
query: {
|
|
757
|
+
...queryString.parse(history.location.search)
|
|
758
|
+
}
|
|
759
|
+
});
|
|
760
|
+
if (!history) {
|
|
1056
761
|
throw new Error();
|
|
1057
|
-
|
|
762
|
+
}
|
|
763
|
+
history.listen((_ref2) => {
|
|
1058
764
|
let {
|
|
1059
|
-
location
|
|
1060
|
-
} =
|
|
1061
|
-
|
|
1062
|
-
pathname:
|
|
1063
|
-
query:
|
|
765
|
+
location
|
|
766
|
+
} = _ref2;
|
|
767
|
+
historyLocationUpdated({
|
|
768
|
+
pathname: location.pathname,
|
|
769
|
+
query: {
|
|
770
|
+
...queryString.parse(location.search)
|
|
771
|
+
}
|
|
1064
772
|
});
|
|
1065
773
|
});
|
|
1066
774
|
}, {
|
|
1067
775
|
name: "subscribeHistoryFx",
|
|
1068
776
|
sid: "-m60vds"
|
|
1069
777
|
});
|
|
1070
|
-
|
|
778
|
+
sample({
|
|
1071
779
|
and: [{
|
|
1072
|
-
clock:
|
|
1073
|
-
target:
|
|
780
|
+
clock: setHistory,
|
|
781
|
+
target: $history
|
|
1074
782
|
}],
|
|
1075
783
|
or: {
|
|
1076
784
|
sid: "ii4q"
|
|
1077
785
|
}
|
|
1078
|
-
})
|
|
786
|
+
});
|
|
787
|
+
sample({
|
|
1079
788
|
and: [{
|
|
1080
|
-
clock:
|
|
789
|
+
clock: $history,
|
|
1081
790
|
filter: Boolean,
|
|
1082
|
-
target:
|
|
791
|
+
target: subscribeHistoryFx
|
|
1083
792
|
}],
|
|
1084
793
|
or: {
|
|
1085
794
|
sid: "39h3j"
|
|
1086
795
|
}
|
|
1087
|
-
})
|
|
796
|
+
});
|
|
797
|
+
sample({
|
|
1088
798
|
and: [{
|
|
1089
|
-
clock:
|
|
1090
|
-
fn: (
|
|
1091
|
-
path:
|
|
1092
|
-
query:
|
|
799
|
+
clock: locationUpdated,
|
|
800
|
+
fn: (location) => ({
|
|
801
|
+
path: location.pathname,
|
|
802
|
+
query: location.query
|
|
1093
803
|
}),
|
|
1094
|
-
target:
|
|
804
|
+
target: $locationState
|
|
1095
805
|
}],
|
|
1096
806
|
or: {
|
|
1097
807
|
sid: "i3x4a"
|
|
1098
808
|
}
|
|
1099
|
-
})
|
|
809
|
+
});
|
|
810
|
+
sample({
|
|
1100
811
|
and: [{
|
|
1101
|
-
clock:
|
|
1102
|
-
source:
|
|
1103
|
-
fn: (
|
|
1104
|
-
path
|
|
1105
|
-
|
|
1106
|
-
|
|
812
|
+
clock: navigate,
|
|
813
|
+
source: $path,
|
|
814
|
+
fn: (path, payload) => ({
|
|
815
|
+
path,
|
|
816
|
+
...payload
|
|
817
|
+
}),
|
|
818
|
+
target: navigateFx
|
|
1107
819
|
}],
|
|
1108
820
|
or: {
|
|
1109
821
|
sid: "ylqx4"
|
|
1110
822
|
}
|
|
1111
|
-
})
|
|
1112
|
-
|
|
1113
|
-
$
|
|
1114
|
-
$
|
|
1115
|
-
$
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
823
|
+
});
|
|
824
|
+
return {
|
|
825
|
+
$history,
|
|
826
|
+
$locationState,
|
|
827
|
+
$query,
|
|
828
|
+
$path,
|
|
829
|
+
setHistory,
|
|
830
|
+
navigate,
|
|
831
|
+
back,
|
|
832
|
+
forward,
|
|
833
|
+
locationUpdated,
|
|
834
|
+
trackQuery: trackQueryControlsFactory({
|
|
835
|
+
$query,
|
|
836
|
+
navigate
|
|
1124
837
|
})
|
|
1125
838
|
};
|
|
1126
839
|
}
|
|
1127
|
-
function
|
|
840
|
+
function createRouter(config) {
|
|
1128
841
|
const {
|
|
1129
|
-
base
|
|
1130
|
-
routes
|
|
1131
|
-
} =
|
|
1132
|
-
|
|
1133
|
-
$
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
842
|
+
base = "/",
|
|
843
|
+
routes
|
|
844
|
+
} = config;
|
|
845
|
+
const {
|
|
846
|
+
$path,
|
|
847
|
+
$query,
|
|
848
|
+
back,
|
|
849
|
+
forward,
|
|
850
|
+
navigate,
|
|
851
|
+
setHistory,
|
|
852
|
+
locationUpdated
|
|
853
|
+
} = createRouterControls();
|
|
854
|
+
const mappedRoutes = routes.map((route) => {
|
|
855
|
+
let internalRoute = route;
|
|
856
|
+
const path = [];
|
|
857
|
+
path.unshift(internalRoute.path);
|
|
858
|
+
while (internalRoute.parent) {
|
|
859
|
+
internalRoute = internalRoute.parent;
|
|
860
|
+
if (internalRoute.path !== "/") {
|
|
861
|
+
path.unshift(internalRoute.path);
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
const joinedPath = base === "/" ? path.join("") : [base, ...path].join("");
|
|
865
|
+
const {
|
|
866
|
+
build,
|
|
867
|
+
parse
|
|
868
|
+
} = compile(joinedPath);
|
|
1148
869
|
return {
|
|
1149
|
-
route
|
|
1150
|
-
path:
|
|
1151
|
-
build
|
|
1152
|
-
parse
|
|
870
|
+
route,
|
|
871
|
+
path: joinedPath,
|
|
872
|
+
build,
|
|
873
|
+
parse
|
|
1153
874
|
};
|
|
1154
|
-
})
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
875
|
+
});
|
|
876
|
+
const $activeRoutes = $path.map((path) => {
|
|
877
|
+
const result = [];
|
|
878
|
+
if (!path) {
|
|
879
|
+
return result;
|
|
880
|
+
}
|
|
1158
881
|
for (const {
|
|
1159
|
-
route
|
|
1160
|
-
parse
|
|
1161
|
-
} of
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
882
|
+
route,
|
|
883
|
+
parse
|
|
884
|
+
} of mappedRoutes) {
|
|
885
|
+
if (parse(path)) {
|
|
886
|
+
result.push(route);
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
return result;
|
|
890
|
+
});
|
|
891
|
+
const openRoutesByPathFx = attach({
|
|
1165
892
|
and: {
|
|
1166
893
|
source: {
|
|
1167
|
-
query:
|
|
1168
|
-
path:
|
|
894
|
+
query: $query,
|
|
895
|
+
path: $path
|
|
1169
896
|
},
|
|
1170
|
-
effect: async (
|
|
897
|
+
effect: async (_ref) => {
|
|
1171
898
|
let {
|
|
1172
|
-
query
|
|
1173
|
-
path
|
|
1174
|
-
} =
|
|
899
|
+
query,
|
|
900
|
+
path
|
|
901
|
+
} = _ref;
|
|
1175
902
|
for (const {
|
|
1176
|
-
route
|
|
1177
|
-
parse
|
|
1178
|
-
} of
|
|
1179
|
-
const
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
}
|
|
903
|
+
route,
|
|
904
|
+
parse
|
|
905
|
+
} of mappedRoutes) {
|
|
906
|
+
const matchResult = parse(path);
|
|
907
|
+
const [routeClosed, routeNavigated] = [scopeBind(route.internal.close), scopeBind(route.internal.navigated)];
|
|
908
|
+
if (!matchResult) {
|
|
909
|
+
routeClosed();
|
|
910
|
+
} else {
|
|
911
|
+
routeNavigated({
|
|
912
|
+
query,
|
|
913
|
+
params: matchResult.params
|
|
914
|
+
});
|
|
915
|
+
}
|
|
1184
916
|
}
|
|
1185
917
|
}
|
|
1186
918
|
},
|
|
@@ -1190,234 +922,314 @@ function qe(e) {
|
|
|
1190
922
|
}
|
|
1191
923
|
});
|
|
1192
924
|
for (const {
|
|
1193
|
-
route
|
|
1194
|
-
build
|
|
1195
|
-
} of
|
|
1196
|
-
|
|
925
|
+
route,
|
|
926
|
+
build
|
|
927
|
+
} of mappedRoutes) {
|
|
928
|
+
sample({
|
|
1197
929
|
and: [{
|
|
1198
|
-
clock:
|
|
1199
|
-
filter: (
|
|
1200
|
-
fn: (
|
|
1201
|
-
var m;
|
|
930
|
+
clock: route.internal.openFx.doneData,
|
|
931
|
+
filter: (payload) => (payload == null ? void 0 : payload.navigate) !== false,
|
|
932
|
+
fn: (payload) => {
|
|
1202
933
|
return {
|
|
1203
|
-
path:
|
|
1204
|
-
query: (
|
|
1205
|
-
replace:
|
|
934
|
+
path: build(payload && "params" in payload ? payload.params : void 0),
|
|
935
|
+
query: (payload == null ? void 0 : payload.query) ?? {},
|
|
936
|
+
replace: payload == null ? void 0 : payload.replace
|
|
1206
937
|
};
|
|
1207
938
|
},
|
|
1208
|
-
target:
|
|
939
|
+
target: navigate
|
|
1209
940
|
}],
|
|
1210
941
|
or: {
|
|
1211
942
|
sid: "exzzqg"
|
|
1212
943
|
}
|
|
1213
944
|
});
|
|
1214
|
-
|
|
945
|
+
}
|
|
946
|
+
sample({
|
|
1215
947
|
and: [{
|
|
1216
|
-
clock:
|
|
1217
|
-
fn: (
|
|
1218
|
-
path:
|
|
1219
|
-
query:
|
|
948
|
+
clock: locationUpdated,
|
|
949
|
+
fn: (location) => ({
|
|
950
|
+
path: location.pathname,
|
|
951
|
+
query: location.query
|
|
1220
952
|
}),
|
|
1221
|
-
target:
|
|
953
|
+
target: openRoutesByPathFx
|
|
1222
954
|
}],
|
|
1223
955
|
or: {
|
|
1224
956
|
sid: "ficdn3"
|
|
1225
957
|
}
|
|
1226
|
-
})
|
|
1227
|
-
|
|
1228
|
-
$
|
|
1229
|
-
$
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
$
|
|
1239
|
-
|
|
958
|
+
});
|
|
959
|
+
return {
|
|
960
|
+
$query,
|
|
961
|
+
$path,
|
|
962
|
+
$activeRoutes,
|
|
963
|
+
back,
|
|
964
|
+
forward,
|
|
965
|
+
navigate,
|
|
966
|
+
routes,
|
|
967
|
+
setHistory,
|
|
968
|
+
mappedRoutes,
|
|
969
|
+
trackQuery: trackQueryFactory({
|
|
970
|
+
$activeRoutes,
|
|
971
|
+
$query,
|
|
972
|
+
navigate
|
|
1240
973
|
}),
|
|
1241
974
|
"@@unitShape": () => ({
|
|
1242
|
-
query:
|
|
1243
|
-
path:
|
|
1244
|
-
activeRoutes:
|
|
1245
|
-
onBack:
|
|
1246
|
-
onForward:
|
|
1247
|
-
onNavigate:
|
|
975
|
+
query: $query,
|
|
976
|
+
path: $path,
|
|
977
|
+
activeRoutes: $activeRoutes,
|
|
978
|
+
onBack: back,
|
|
979
|
+
onForward: forward,
|
|
980
|
+
onNavigate: navigate
|
|
1248
981
|
})
|
|
1249
982
|
};
|
|
1250
983
|
}
|
|
1251
|
-
function
|
|
1252
|
-
|
|
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
|
+
});
|
|
993
|
+
const $params = createStore(null, {
|
|
1253
994
|
name: "$params",
|
|
1254
|
-
sid: "-
|
|
1255
|
-
})
|
|
995
|
+
sid: "-ftspin"
|
|
996
|
+
});
|
|
997
|
+
const $isOpened = createStore(false, {
|
|
1256
998
|
name: "$isOpened",
|
|
1257
|
-
sid: "-
|
|
1258
|
-
})
|
|
999
|
+
sid: "-v6936c"
|
|
1000
|
+
});
|
|
1001
|
+
const $isPending = pending;
|
|
1002
|
+
const open = createEvent({
|
|
1259
1003
|
name: "open",
|
|
1260
|
-
sid: "
|
|
1261
|
-
})
|
|
1004
|
+
sid: "juc47v"
|
|
1005
|
+
});
|
|
1006
|
+
const opened = createEvent({
|
|
1262
1007
|
name: "opened",
|
|
1263
|
-
sid: "-
|
|
1264
|
-
})
|
|
1008
|
+
sid: "-quc8vc"
|
|
1009
|
+
});
|
|
1010
|
+
const openedOnServer = createEvent({
|
|
1265
1011
|
name: "openedOnServer",
|
|
1266
|
-
sid: "
|
|
1267
|
-
})
|
|
1012
|
+
sid: "n25rh4"
|
|
1013
|
+
});
|
|
1014
|
+
const openedOnClient = createEvent({
|
|
1268
1015
|
name: "openedOnClient",
|
|
1269
|
-
sid: "-
|
|
1270
|
-
})
|
|
1016
|
+
sid: "-auqikx"
|
|
1017
|
+
});
|
|
1018
|
+
const close = createEvent({
|
|
1271
1019
|
name: "close",
|
|
1272
|
-
sid: "
|
|
1273
|
-
})
|
|
1020
|
+
sid: "4zlqo6"
|
|
1021
|
+
});
|
|
1022
|
+
const closed = createEvent({
|
|
1274
1023
|
name: "closed",
|
|
1275
|
-
sid: "
|
|
1276
|
-
})
|
|
1024
|
+
sid: "wbpfrk"
|
|
1025
|
+
});
|
|
1026
|
+
const cancelled = createEvent({
|
|
1277
1027
|
name: "cancelled",
|
|
1278
|
-
sid: "-
|
|
1028
|
+
sid: "-q3x5sf"
|
|
1279
1029
|
});
|
|
1280
|
-
|
|
1030
|
+
sample({
|
|
1281
1031
|
and: [{
|
|
1282
|
-
clock:
|
|
1283
|
-
target:
|
|
1032
|
+
clock: open,
|
|
1033
|
+
target: opened
|
|
1284
1034
|
}],
|
|
1285
1035
|
or: {
|
|
1286
|
-
sid: "-
|
|
1036
|
+
sid: "-u8b34x"
|
|
1287
1037
|
}
|
|
1288
|
-
})
|
|
1038
|
+
});
|
|
1039
|
+
split({
|
|
1289
1040
|
and: [{
|
|
1290
|
-
source:
|
|
1291
|
-
match: () => typeof window
|
|
1041
|
+
source: opened,
|
|
1042
|
+
match: () => typeof window === "undefined" ? "server" : "client",
|
|
1292
1043
|
cases: {
|
|
1293
|
-
server:
|
|
1294
|
-
client:
|
|
1044
|
+
server: openedOnServer,
|
|
1045
|
+
client: openedOnClient
|
|
1295
1046
|
}
|
|
1296
1047
|
}],
|
|
1297
1048
|
or: {
|
|
1298
|
-
sid: "-
|
|
1049
|
+
sid: "-u5k464"
|
|
1299
1050
|
}
|
|
1300
|
-
})
|
|
1051
|
+
});
|
|
1052
|
+
sample({
|
|
1301
1053
|
and: [{
|
|
1302
|
-
clock:
|
|
1303
|
-
target:
|
|
1054
|
+
clock: close,
|
|
1055
|
+
target: closed
|
|
1304
1056
|
}],
|
|
1305
1057
|
or: {
|
|
1306
|
-
sid: "-
|
|
1058
|
+
sid: "-tp2ada"
|
|
1307
1059
|
}
|
|
1308
|
-
})
|
|
1060
|
+
});
|
|
1061
|
+
sample({
|
|
1309
1062
|
and: [{
|
|
1310
|
-
clock: [
|
|
1311
|
-
target:
|
|
1063
|
+
clock: [opened.map(() => true), closed.map(() => false)],
|
|
1064
|
+
target: $isOpened
|
|
1312
1065
|
}],
|
|
1313
1066
|
or: {
|
|
1314
|
-
sid: "-
|
|
1067
|
+
sid: "-tarmxw"
|
|
1315
1068
|
}
|
|
1316
|
-
})
|
|
1317
|
-
|
|
1318
|
-
$
|
|
1319
|
-
$
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1069
|
+
});
|
|
1070
|
+
return {
|
|
1071
|
+
$params,
|
|
1072
|
+
$isOpened,
|
|
1073
|
+
$isPending,
|
|
1074
|
+
open,
|
|
1075
|
+
opened,
|
|
1076
|
+
openedOnClient,
|
|
1077
|
+
openedOnServer,
|
|
1078
|
+
close,
|
|
1079
|
+
closed,
|
|
1080
|
+
cancelled,
|
|
1327
1081
|
// @ts-expect-error emulated path for virtual route
|
|
1328
1082
|
path: null,
|
|
1329
1083
|
"@@unitShape": () => ({
|
|
1330
|
-
params:
|
|
1331
|
-
isOpened:
|
|
1332
|
-
isPending:
|
|
1333
|
-
onOpen:
|
|
1084
|
+
params: $params,
|
|
1085
|
+
isOpened: $isOpened,
|
|
1086
|
+
isPending: $isPending,
|
|
1087
|
+
onOpen: open
|
|
1334
1088
|
})
|
|
1335
1089
|
};
|
|
1336
1090
|
}
|
|
1337
|
-
function
|
|
1091
|
+
function chainRoute(props) {
|
|
1338
1092
|
const {
|
|
1339
|
-
route
|
|
1340
|
-
beforeOpen
|
|
1341
|
-
openOn
|
|
1342
|
-
cancelOn
|
|
1343
|
-
} =
|
|
1344
|
-
let
|
|
1345
|
-
const
|
|
1346
|
-
var d;
|
|
1347
|
-
return (d = o) === null || d === void 0 ? void 0 : d();
|
|
1348
|
-
}, {
|
|
1093
|
+
route,
|
|
1094
|
+
beforeOpen,
|
|
1095
|
+
openOn,
|
|
1096
|
+
cancelOn
|
|
1097
|
+
} = props;
|
|
1098
|
+
let asyncImport;
|
|
1099
|
+
const waitForAsyncBundleFx = createEffect(() => asyncImport == null ? void 0 : asyncImport(), {
|
|
1349
1100
|
name: "waitForAsyncBundleFx",
|
|
1350
|
-
sid: "-
|
|
1351
|
-
})
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1101
|
+
sid: "-tvp99n"
|
|
1102
|
+
});
|
|
1103
|
+
const openFx = createEffect(async (payload) => {
|
|
1104
|
+
await waitForAsyncBundleFx();
|
|
1105
|
+
for (const trigger of [].concat(beforeOpen)) {
|
|
1106
|
+
await trigger(payload);
|
|
1107
|
+
}
|
|
1355
1108
|
}, {
|
|
1356
1109
|
name: "openFx",
|
|
1357
|
-
sid: "-
|
|
1358
|
-
})
|
|
1359
|
-
|
|
1110
|
+
sid: "-9kc1je"
|
|
1111
|
+
});
|
|
1112
|
+
const virtualRoute = createVirtualRoute(openFx.pending);
|
|
1113
|
+
sample({
|
|
1360
1114
|
and: [{
|
|
1361
|
-
clock:
|
|
1362
|
-
target:
|
|
1115
|
+
clock: route.opened,
|
|
1116
|
+
target: openFx
|
|
1363
1117
|
}],
|
|
1364
1118
|
or: {
|
|
1365
|
-
sid: "
|
|
1119
|
+
sid: "1162lk"
|
|
1366
1120
|
}
|
|
1367
|
-
})
|
|
1121
|
+
});
|
|
1122
|
+
sample({
|
|
1368
1123
|
and: [{
|
|
1369
|
-
clock:
|
|
1370
|
-
fn: (
|
|
1371
|
-
target:
|
|
1124
|
+
clock: route.opened,
|
|
1125
|
+
fn: (payload) => payload && "params" in payload ? payload.params : null,
|
|
1126
|
+
target: virtualRoute.$params
|
|
1372
1127
|
}],
|
|
1373
1128
|
or: {
|
|
1374
|
-
sid: "
|
|
1129
|
+
sid: "13x1kd"
|
|
1375
1130
|
}
|
|
1376
|
-
})
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1131
|
+
});
|
|
1132
|
+
if (openOn) {
|
|
1133
|
+
sample({
|
|
1134
|
+
and: [{
|
|
1135
|
+
clock: openOn,
|
|
1136
|
+
source: {
|
|
1137
|
+
params: virtualRoute.$params
|
|
1138
|
+
},
|
|
1139
|
+
fn: (_ref) => {
|
|
1140
|
+
let {
|
|
1141
|
+
params
|
|
1142
|
+
} = _ref;
|
|
1143
|
+
return {
|
|
1144
|
+
params
|
|
1145
|
+
};
|
|
1146
|
+
},
|
|
1147
|
+
target: virtualRoute.open
|
|
1148
|
+
}],
|
|
1149
|
+
or: {
|
|
1150
|
+
sid: "1kevex"
|
|
1151
|
+
}
|
|
1152
|
+
});
|
|
1153
|
+
}
|
|
1154
|
+
if (cancelOn) {
|
|
1155
|
+
sample({
|
|
1156
|
+
and: [{
|
|
1157
|
+
clock: [route.closed].concat(cancelOn),
|
|
1158
|
+
target: virtualRoute.close
|
|
1159
|
+
}],
|
|
1160
|
+
or: {
|
|
1161
|
+
sid: "20wp7r"
|
|
1162
|
+
}
|
|
1163
|
+
});
|
|
1164
|
+
sample({
|
|
1165
|
+
and: [{
|
|
1166
|
+
clock: [].concat(cancelOn),
|
|
1167
|
+
target: virtualRoute.cancelled
|
|
1168
|
+
}],
|
|
1169
|
+
or: {
|
|
1170
|
+
sid: "2f7cn5"
|
|
1171
|
+
}
|
|
1172
|
+
});
|
|
1173
|
+
}
|
|
1174
|
+
return Object.assign(virtualRoute, {
|
|
1175
|
+
internal: {
|
|
1176
|
+
setAsyncImport: (value) => asyncImport = value
|
|
1394
1177
|
}
|
|
1395
|
-
})
|
|
1178
|
+
});
|
|
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({
|
|
1396
1189
|
and: [{
|
|
1397
|
-
clock:
|
|
1398
|
-
|
|
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
|
|
1399
1199
|
}],
|
|
1400
1200
|
or: {
|
|
1401
|
-
sid: "
|
|
1201
|
+
sid: "-xn8czd"
|
|
1402
1202
|
}
|
|
1403
|
-
})
|
|
1203
|
+
});
|
|
1204
|
+
sample({
|
|
1404
1205
|
and: [{
|
|
1405
|
-
clock:
|
|
1406
|
-
|
|
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
|
|
1407
1220
|
}],
|
|
1408
1221
|
or: {
|
|
1409
|
-
sid: "
|
|
1410
|
-
}
|
|
1411
|
-
})), Object.assign(c, {
|
|
1412
|
-
internal: {
|
|
1413
|
-
setAsyncImport: (d) => o = d
|
|
1222
|
+
sid: "-x7u4d9"
|
|
1414
1223
|
}
|
|
1415
1224
|
});
|
|
1225
|
+
return virtual;
|
|
1416
1226
|
}
|
|
1417
1227
|
export {
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1228
|
+
chainRoute,
|
|
1229
|
+
createRoute,
|
|
1230
|
+
createRouter,
|
|
1231
|
+
createRouterControls,
|
|
1232
|
+
createVirtualRoute,
|
|
1233
|
+
group,
|
|
1234
|
+
parameters
|
|
1423
1235
|
};
|