|
1
|
|
|
(function (global, factory) { |
|
2
|
|
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) : |
|
3
|
|
|
typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) : |
|
4
|
|
|
(global = global || self, factory(global.ReactRouterDOM = {}, global.React)); |
|
5
|
|
|
}(this, function (exports, React) { 'use strict'; |
|
6
|
|
|
|
|
7
|
|
|
var React__default = 'default' in React ? React['default'] : React; |
|
8
|
|
|
|
|
9
|
|
|
function _inheritsLoose(subClass, superClass) { |
|
10
|
|
|
subClass.prototype = Object.create(superClass.prototype); |
|
11
|
|
|
subClass.prototype.constructor = subClass; |
|
12
|
|
|
subClass.__proto__ = superClass; |
|
13
|
|
|
} |
|
14
|
|
|
|
|
15
|
|
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; |
|
16
|
|
|
|
|
17
|
|
|
function unwrapExports (x) { |
|
18
|
|
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; |
|
19
|
|
|
} |
|
20
|
|
|
|
|
21
|
|
|
function createCommonjsModule(fn, module) { |
|
22
|
|
|
return module = { exports: {} }, fn(module, module.exports), module.exports; |
|
23
|
|
|
} |
|
24
|
|
|
|
|
25
|
|
|
var reactIs_production_min = createCommonjsModule(function (module, exports) { |
|
26
|
|
|
Object.defineProperty(exports,"__esModule",{value:!0}); |
|
27
|
|
|
var b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b?Symbol.for("react.suspense_list"): |
|
28
|
|
|
60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.fundamental"):60117,w=b?Symbol.for("react.responder"):60118;function x(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case h:return a;default:return u}}case t:case r:case d:return u}}}function y(a){return x(a)===m}exports.typeOf=x;exports.AsyncMode=l; |
|
29
|
|
|
exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p; |
|
30
|
|
|
exports.isValidElementType=function(a){return "string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===v||a.$$typeof===w)};exports.isAsyncMode=function(a){return y(a)||x(a)===l};exports.isConcurrentMode=y;exports.isContextConsumer=function(a){return x(a)===k};exports.isContextProvider=function(a){return x(a)===h}; |
|
31
|
|
|
exports.isElement=function(a){return "object"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return x(a)===n};exports.isFragment=function(a){return x(a)===e};exports.isLazy=function(a){return x(a)===t};exports.isMemo=function(a){return x(a)===r};exports.isPortal=function(a){return x(a)===d};exports.isProfiler=function(a){return x(a)===g};exports.isStrictMode=function(a){return x(a)===f};exports.isSuspense=function(a){return x(a)===p}; |
|
32
|
|
|
}); |
|
33
|
|
|
|
|
34
|
|
|
unwrapExports(reactIs_production_min); |
|
35
|
|
|
var reactIs_production_min_1 = reactIs_production_min.typeOf; |
|
36
|
|
|
var reactIs_production_min_2 = reactIs_production_min.AsyncMode; |
|
37
|
|
|
var reactIs_production_min_3 = reactIs_production_min.ConcurrentMode; |
|
38
|
|
|
var reactIs_production_min_4 = reactIs_production_min.ContextConsumer; |
|
39
|
|
|
var reactIs_production_min_5 = reactIs_production_min.ContextProvider; |
|
40
|
|
|
var reactIs_production_min_6 = reactIs_production_min.Element; |
|
41
|
|
|
var reactIs_production_min_7 = reactIs_production_min.ForwardRef; |
|
42
|
|
|
var reactIs_production_min_8 = reactIs_production_min.Fragment; |
|
43
|
|
|
var reactIs_production_min_9 = reactIs_production_min.Lazy; |
|
44
|
|
|
var reactIs_production_min_10 = reactIs_production_min.Memo; |
|
45
|
|
|
var reactIs_production_min_11 = reactIs_production_min.Portal; |
|
46
|
|
|
var reactIs_production_min_12 = reactIs_production_min.Profiler; |
|
47
|
|
|
var reactIs_production_min_13 = reactIs_production_min.StrictMode; |
|
48
|
|
|
var reactIs_production_min_14 = reactIs_production_min.Suspense; |
|
49
|
|
|
var reactIs_production_min_15 = reactIs_production_min.isValidElementType; |
|
50
|
|
|
var reactIs_production_min_16 = reactIs_production_min.isAsyncMode; |
|
51
|
|
|
var reactIs_production_min_17 = reactIs_production_min.isConcurrentMode; |
|
52
|
|
|
var reactIs_production_min_18 = reactIs_production_min.isContextConsumer; |
|
53
|
|
|
var reactIs_production_min_19 = reactIs_production_min.isContextProvider; |
|
54
|
|
|
var reactIs_production_min_20 = reactIs_production_min.isElement; |
|
55
|
|
|
var reactIs_production_min_21 = reactIs_production_min.isForwardRef; |
|
56
|
|
|
var reactIs_production_min_22 = reactIs_production_min.isFragment; |
|
57
|
|
|
var reactIs_production_min_23 = reactIs_production_min.isLazy; |
|
58
|
|
|
var reactIs_production_min_24 = reactIs_production_min.isMemo; |
|
59
|
|
|
var reactIs_production_min_25 = reactIs_production_min.isPortal; |
|
60
|
|
|
var reactIs_production_min_26 = reactIs_production_min.isProfiler; |
|
61
|
|
|
var reactIs_production_min_27 = reactIs_production_min.isStrictMode; |
|
62
|
|
|
var reactIs_production_min_28 = reactIs_production_min.isSuspense; |
|
63
|
|
|
|
|
64
|
|
|
var reactIs_development = createCommonjsModule(function (module, exports) { |
|
65
|
|
|
|
|
66
|
|
|
|
|
67
|
|
|
|
|
68
|
|
|
{ |
|
69
|
|
|
(function() { |
|
70
|
|
|
|
|
71
|
|
|
Object.defineProperty(exports, '__esModule', { value: true }); |
|
72
|
|
|
|
|
73
|
|
|
// The Symbol used to tag the ReactElement-like types. If there is no native Symbol |
|
74
|
|
|
// nor polyfill, then a plain number is used for performance. |
|
75
|
|
|
var hasSymbol = typeof Symbol === 'function' && Symbol.for; |
|
76
|
|
|
|
|
77
|
|
|
var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; |
|
78
|
|
|
var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; |
|
79
|
|
|
var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; |
|
80
|
|
|
var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; |
|
81
|
|
|
var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; |
|
82
|
|
|
var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; |
|
83
|
|
|
var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; |
|
84
|
|
|
// TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary |
|
85
|
|
|
// (unstable) APIs that have been removed. Can we remove the symbols? |
|
86
|
|
|
var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; |
|
87
|
|
|
var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; |
|
88
|
|
|
var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; |
|
89
|
|
|
var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; |
|
90
|
|
|
var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8; |
|
91
|
|
|
var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; |
|
92
|
|
|
var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; |
|
93
|
|
|
var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5; |
|
94
|
|
|
var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6; |
|
95
|
|
|
|
|
96
|
|
|
function isValidElementType(type) { |
|
97
|
|
|
return typeof type === 'string' || typeof type === 'function' || |
|
98
|
|
|
// Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. |
|
99
|
|
|
type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE); |
|
100
|
|
|
} |
|
101
|
|
|
|
|
102
|
|
|
/** |
|
103
|
|
|
* Forked from fbjs/warning: |
|
104
|
|
|
* https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js |
|
105
|
|
|
* |
|
106
|
|
|
* Only change is we use console.warn instead of console.error, |
|
107
|
|
|
* and do nothing when 'console' is not supported. |
|
108
|
|
|
* This really simplifies the code. |
|
109
|
|
|
* --- |
|
110
|
|
|
* Similar to invariant but only logs a warning if the condition is not met. |
|
111
|
|
|
* This can be used to log issues in development environments in critical |
|
112
|
|
|
* paths. Removing the logging code for production environments will keep the |
|
113
|
|
|
* same logic and follow the same code paths. |
|
114
|
|
|
*/ |
|
115
|
|
|
|
|
116
|
|
|
var lowPriorityWarning = function () {}; |
|
117
|
|
|
|
|
118
|
|
|
{ |
|
119
|
|
|
var printWarning = function (format) { |
|
120
|
|
|
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { |
|
121
|
|
|
args[_key - 1] = arguments[_key]; |
|
122
|
|
|
} |
|
123
|
|
|
|
|
124
|
|
|
var argIndex = 0; |
|
125
|
|
|
var message = 'Warning: ' + format.replace(/%s/g, function () { |
|
126
|
|
|
return args[argIndex++]; |
|
127
|
|
|
}); |
|
128
|
|
|
if (typeof console !== 'undefined') { |
|
129
|
|
|
console.warn(message); |
|
130
|
|
|
} |
|
131
|
|
|
try { |
|
132
|
|
|
// --- Welcome to debugging React --- |
|
133
|
|
|
// This error was thrown as a convenience so that you can use this stack |
|
134
|
|
|
// to find the callsite that caused this warning to fire. |
|
135
|
|
|
throw new Error(message); |
|
136
|
|
|
} catch (x) {} |
|
137
|
|
|
}; |
|
138
|
|
|
|
|
139
|
|
|
lowPriorityWarning = function (condition, format) { |
|
140
|
|
|
if (format === undefined) { |
|
141
|
|
|
throw new Error('`lowPriorityWarning(condition, format, ...args)` requires a warning ' + 'message argument'); |
|
142
|
|
|
} |
|
143
|
|
|
if (!condition) { |
|
144
|
|
|
for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { |
|
145
|
|
|
args[_key2 - 2] = arguments[_key2]; |
|
146
|
|
|
} |
|
147
|
|
|
|
|
148
|
|
|
printWarning.apply(undefined, [format].concat(args)); |
|
149
|
|
|
} |
|
150
|
|
|
}; |
|
151
|
|
|
} |
|
152
|
|
|
|
|
153
|
|
|
var lowPriorityWarning$1 = lowPriorityWarning; |
|
154
|
|
|
|
|
155
|
|
|
function typeOf(object) { |
|
156
|
|
|
if (typeof object === 'object' && object !== null) { |
|
157
|
|
|
var $$typeof = object.$$typeof; |
|
158
|
|
|
switch ($$typeof) { |
|
159
|
|
|
case REACT_ELEMENT_TYPE: |
|
160
|
|
|
var type = object.type; |
|
161
|
|
|
|
|
162
|
|
|
switch (type) { |
|
163
|
|
|
case REACT_ASYNC_MODE_TYPE: |
|
164
|
|
|
case REACT_CONCURRENT_MODE_TYPE: |
|
165
|
|
|
case REACT_FRAGMENT_TYPE: |
|
166
|
|
|
case REACT_PROFILER_TYPE: |
|
167
|
|
|
case REACT_STRICT_MODE_TYPE: |
|
168
|
|
|
case REACT_SUSPENSE_TYPE: |
|
169
|
|
|
return type; |
|
170
|
|
|
default: |
|
171
|
|
|
var $$typeofType = type && type.$$typeof; |
|
172
|
|
|
|
|
173
|
|
|
switch ($$typeofType) { |
|
174
|
|
|
case REACT_CONTEXT_TYPE: |
|
175
|
|
|
case REACT_FORWARD_REF_TYPE: |
|
176
|
|
|
case REACT_PROVIDER_TYPE: |
|
177
|
|
|
return $$typeofType; |
|
178
|
|
|
default: |
|
179
|
|
|
return $$typeof; |
|
180
|
|
|
} |
|
181
|
|
|
} |
|
182
|
|
|
case REACT_LAZY_TYPE: |
|
183
|
|
|
case REACT_MEMO_TYPE: |
|
184
|
|
|
case REACT_PORTAL_TYPE: |
|
185
|
|
|
return $$typeof; |
|
186
|
|
|
} |
|
187
|
|
|
} |
|
188
|
|
|
|
|
189
|
|
|
return undefined; |
|
190
|
|
|
} |
|
191
|
|
|
|
|
192
|
|
|
// AsyncMode is deprecated along with isAsyncMode |
|
193
|
|
|
var AsyncMode = REACT_ASYNC_MODE_TYPE; |
|
194
|
|
|
var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; |
|
195
|
|
|
var ContextConsumer = REACT_CONTEXT_TYPE; |
|
196
|
|
|
var ContextProvider = REACT_PROVIDER_TYPE; |
|
197
|
|
|
var Element = REACT_ELEMENT_TYPE; |
|
198
|
|
|
var ForwardRef = REACT_FORWARD_REF_TYPE; |
|
199
|
|
|
var Fragment = REACT_FRAGMENT_TYPE; |
|
200
|
|
|
var Lazy = REACT_LAZY_TYPE; |
|
201
|
|
|
var Memo = REACT_MEMO_TYPE; |
|
202
|
|
|
var Portal = REACT_PORTAL_TYPE; |
|
203
|
|
|
var Profiler = REACT_PROFILER_TYPE; |
|
204
|
|
|
var StrictMode = REACT_STRICT_MODE_TYPE; |
|
205
|
|
|
var Suspense = REACT_SUSPENSE_TYPE; |
|
206
|
|
|
|
|
207
|
|
|
var hasWarnedAboutDeprecatedIsAsyncMode = false; |
|
208
|
|
|
|
|
209
|
|
|
// AsyncMode should be deprecated |
|
210
|
|
|
function isAsyncMode(object) { |
|
211
|
|
|
{ |
|
212
|
|
|
if (!hasWarnedAboutDeprecatedIsAsyncMode) { |
|
213
|
|
|
hasWarnedAboutDeprecatedIsAsyncMode = true; |
|
214
|
|
|
lowPriorityWarning$1(false, 'The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); |
|
215
|
|
|
} |
|
216
|
|
|
} |
|
217
|
|
|
return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; |
|
218
|
|
|
} |
|
219
|
|
|
function isConcurrentMode(object) { |
|
220
|
|
|
return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; |
|
221
|
|
|
} |
|
222
|
|
|
function isContextConsumer(object) { |
|
223
|
|
|
return typeOf(object) === REACT_CONTEXT_TYPE; |
|
224
|
|
|
} |
|
225
|
|
|
function isContextProvider(object) { |
|
226
|
|
|
return typeOf(object) === REACT_PROVIDER_TYPE; |
|
227
|
|
|
} |
|
228
|
|
|
function isElement(object) { |
|
229
|
|
|
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; |
|
230
|
|
|
} |
|
231
|
|
|
function isForwardRef(object) { |
|
232
|
|
|
return typeOf(object) === REACT_FORWARD_REF_TYPE; |
|
233
|
|
|
} |
|
234
|
|
|
function isFragment(object) { |
|
235
|
|
|
return typeOf(object) === REACT_FRAGMENT_TYPE; |
|
236
|
|
|
} |
|
237
|
|
|
function isLazy(object) { |
|
238
|
|
|
return typeOf(object) === REACT_LAZY_TYPE; |
|
239
|
|
|
} |
|
240
|
|
|
function isMemo(object) { |
|
241
|
|
|
return typeOf(object) === REACT_MEMO_TYPE; |
|
242
|
|
|
} |
|
243
|
|
|
function isPortal(object) { |
|
244
|
|
|
return typeOf(object) === REACT_PORTAL_TYPE; |
|
245
|
|
|
} |
|
246
|
|
|
function isProfiler(object) { |
|
247
|
|
|
return typeOf(object) === REACT_PROFILER_TYPE; |
|
248
|
|
|
} |
|
249
|
|
|
function isStrictMode(object) { |
|
250
|
|
|
return typeOf(object) === REACT_STRICT_MODE_TYPE; |
|
251
|
|
|
} |
|
252
|
|
|
function isSuspense(object) { |
|
253
|
|
|
return typeOf(object) === REACT_SUSPENSE_TYPE; |
|
254
|
|
|
} |
|
255
|
|
|
|
|
256
|
|
|
exports.typeOf = typeOf; |
|
257
|
|
|
exports.AsyncMode = AsyncMode; |
|
258
|
|
|
exports.ConcurrentMode = ConcurrentMode; |
|
259
|
|
|
exports.ContextConsumer = ContextConsumer; |
|
260
|
|
|
exports.ContextProvider = ContextProvider; |
|
261
|
|
|
exports.Element = Element; |
|
262
|
|
|
exports.ForwardRef = ForwardRef; |
|
263
|
|
|
exports.Fragment = Fragment; |
|
264
|
|
|
exports.Lazy = Lazy; |
|
265
|
|
|
exports.Memo = Memo; |
|
266
|
|
|
exports.Portal = Portal; |
|
267
|
|
|
exports.Profiler = Profiler; |
|
268
|
|
|
exports.StrictMode = StrictMode; |
|
269
|
|
|
exports.Suspense = Suspense; |
|
270
|
|
|
exports.isValidElementType = isValidElementType; |
|
271
|
|
|
exports.isAsyncMode = isAsyncMode; |
|
272
|
|
|
exports.isConcurrentMode = isConcurrentMode; |
|
273
|
|
|
exports.isContextConsumer = isContextConsumer; |
|
274
|
|
|
exports.isContextProvider = isContextProvider; |
|
275
|
|
|
exports.isElement = isElement; |
|
276
|
|
|
exports.isForwardRef = isForwardRef; |
|
277
|
|
|
exports.isFragment = isFragment; |
|
278
|
|
|
exports.isLazy = isLazy; |
|
279
|
|
|
exports.isMemo = isMemo; |
|
280
|
|
|
exports.isPortal = isPortal; |
|
281
|
|
|
exports.isProfiler = isProfiler; |
|
282
|
|
|
exports.isStrictMode = isStrictMode; |
|
283
|
|
|
exports.isSuspense = isSuspense; |
|
284
|
|
|
})(); |
|
285
|
|
|
} |
|
286
|
|
|
}); |
|
287
|
|
|
|
|
288
|
|
|
unwrapExports(reactIs_development); |
|
289
|
|
|
var reactIs_development_1 = reactIs_development.typeOf; |
|
290
|
|
|
var reactIs_development_2 = reactIs_development.AsyncMode; |
|
291
|
|
|
var reactIs_development_3 = reactIs_development.ConcurrentMode; |
|
292
|
|
|
var reactIs_development_4 = reactIs_development.ContextConsumer; |
|
293
|
|
|
var reactIs_development_5 = reactIs_development.ContextProvider; |
|
294
|
|
|
var reactIs_development_6 = reactIs_development.Element; |
|
295
|
|
|
var reactIs_development_7 = reactIs_development.ForwardRef; |
|
296
|
|
|
var reactIs_development_8 = reactIs_development.Fragment; |
|
297
|
|
|
var reactIs_development_9 = reactIs_development.Lazy; |
|
298
|
|
|
var reactIs_development_10 = reactIs_development.Memo; |
|
299
|
|
|
var reactIs_development_11 = reactIs_development.Portal; |
|
300
|
|
|
var reactIs_development_12 = reactIs_development.Profiler; |
|
301
|
|
|
var reactIs_development_13 = reactIs_development.StrictMode; |
|
302
|
|
|
var reactIs_development_14 = reactIs_development.Suspense; |
|
303
|
|
|
var reactIs_development_15 = reactIs_development.isValidElementType; |
|
304
|
|
|
var reactIs_development_16 = reactIs_development.isAsyncMode; |
|
305
|
|
|
var reactIs_development_17 = reactIs_development.isConcurrentMode; |
|
306
|
|
|
var reactIs_development_18 = reactIs_development.isContextConsumer; |
|
307
|
|
|
var reactIs_development_19 = reactIs_development.isContextProvider; |
|
308
|
|
|
var reactIs_development_20 = reactIs_development.isElement; |
|
309
|
|
|
var reactIs_development_21 = reactIs_development.isForwardRef; |
|
310
|
|
|
var reactIs_development_22 = reactIs_development.isFragment; |
|
311
|
|
|
var reactIs_development_23 = reactIs_development.isLazy; |
|
312
|
|
|
var reactIs_development_24 = reactIs_development.isMemo; |
|
313
|
|
|
var reactIs_development_25 = reactIs_development.isPortal; |
|
314
|
|
|
var reactIs_development_26 = reactIs_development.isProfiler; |
|
315
|
|
|
var reactIs_development_27 = reactIs_development.isStrictMode; |
|
316
|
|
|
var reactIs_development_28 = reactIs_development.isSuspense; |
|
317
|
|
|
|
|
318
|
|
|
var reactIs = createCommonjsModule(function (module) { |
|
319
|
|
|
|
|
320
|
|
|
{ |
|
321
|
|
|
module.exports = reactIs_development; |
|
322
|
|
|
} |
|
323
|
|
|
}); |
|
324
|
|
|
var reactIs_1 = reactIs.isValidElementType; |
|
325
|
|
|
|
|
326
|
|
|
/* |
|
327
|
|
|
object-assign |
|
328
|
|
|
(c) Sindre Sorhus |
|
329
|
|
|
@license MIT |
|
330
|
|
|
*/ |
|
331
|
|
|
/* eslint-disable no-unused-vars */ |
|
332
|
|
|
var getOwnPropertySymbols = Object.getOwnPropertySymbols; |
|
333
|
|
|
var hasOwnProperty = Object.prototype.hasOwnProperty; |
|
334
|
|
|
var propIsEnumerable = Object.prototype.propertyIsEnumerable; |
|
335
|
|
|
|
|
336
|
|
|
function toObject(val) { |
|
337
|
|
|
if (val === null || val === undefined) { |
|
338
|
|
|
throw new TypeError('Object.assign cannot be called with null or undefined'); |
|
339
|
|
|
} |
|
340
|
|
|
|
|
341
|
|
|
return Object(val); |
|
342
|
|
|
} |
|
343
|
|
|
|
|
344
|
|
|
function shouldUseNative() { |
|
345
|
|
|
try { |
|
346
|
|
|
if (!Object.assign) { |
|
347
|
|
|
return false; |
|
348
|
|
|
} |
|
349
|
|
|
|
|
350
|
|
|
// Detect buggy property enumeration order in older V8 versions. |
|
351
|
|
|
|
|
352
|
|
|
// https://bugs.chromium.org/p/v8/issues/detail?id=4118 |
|
353
|
|
|
var test1 = new String('abc'); // eslint-disable-line no-new-wrappers |
|
354
|
|
|
test1[5] = 'de'; |
|
355
|
|
|
if (Object.getOwnPropertyNames(test1)[0] === '5') { |
|
356
|
|
|
return false; |
|
357
|
|
|
} |
|
358
|
|
|
|
|
359
|
|
|
// https://bugs.chromium.org/p/v8/issues/detail?id=3056 |
|
360
|
|
|
var test2 = {}; |
|
361
|
|
|
for (var i = 0; i < 10; i++) { |
|
362
|
|
|
test2['_' + String.fromCharCode(i)] = i; |
|
363
|
|
|
} |
|
364
|
|
|
var order2 = Object.getOwnPropertyNames(test2).map(function (n) { |
|
365
|
|
|
return test2[n]; |
|
366
|
|
|
}); |
|
367
|
|
|
if (order2.join('') !== '0123456789') { |
|
368
|
|
|
return false; |
|
369
|
|
|
} |
|
370
|
|
|
|
|
371
|
|
|
// https://bugs.chromium.org/p/v8/issues/detail?id=3056 |
|
372
|
|
|
var test3 = {}; |
|
373
|
|
|
'abcdefghijklmnopqrst'.split('').forEach(function (letter) { |
|
374
|
|
|
test3[letter] = letter; |
|
375
|
|
|
}); |
|
376
|
|
|
if (Object.keys(Object.assign({}, test3)).join('') !== |
|
377
|
|
|
'abcdefghijklmnopqrst') { |
|
378
|
|
|
return false; |
|
379
|
|
|
} |
|
380
|
|
|
|
|
381
|
|
|
return true; |
|
382
|
|
|
} catch (err) { |
|
383
|
|
|
// We don't expect any of the above to throw, but better to be safe. |
|
384
|
|
|
return false; |
|
385
|
|
|
} |
|
386
|
|
|
} |
|
387
|
|
|
|
|
388
|
|
|
var objectAssign = shouldUseNative() ? Object.assign : function (target, source) { |
|
389
|
|
|
var from; |
|
390
|
|
|
var to = toObject(target); |
|
391
|
|
|
var symbols; |
|
392
|
|
|
|
|
393
|
|
|
for (var s = 1; s < arguments.length; s++) { |
|
394
|
|
|
from = Object(arguments[s]); |
|
395
|
|
|
|
|
396
|
|
|
for (var key in from) { |
|
397
|
|
|
if (hasOwnProperty.call(from, key)) { |
|
398
|
|
|
to[key] = from[key]; |
|
399
|
|
|
} |
|
400
|
|
|
} |
|
401
|
|
|
|
|
402
|
|
|
if (getOwnPropertySymbols) { |
|
403
|
|
|
symbols = getOwnPropertySymbols(from); |
|
404
|
|
|
for (var i = 0; i < symbols.length; i++) { |
|
405
|
|
|
if (propIsEnumerable.call(from, symbols[i])) { |
|
406
|
|
|
to[symbols[i]] = from[symbols[i]]; |
|
407
|
|
|
} |
|
408
|
|
|
} |
|
409
|
|
|
} |
|
410
|
|
|
} |
|
411
|
|
|
|
|
412
|
|
|
return to; |
|
413
|
|
|
}; |
|
414
|
|
|
|
|
415
|
|
|
/** |
|
416
|
|
|
* Copyright (c) 2013-present, Facebook, Inc. |
|
417
|
|
|
* |
|
418
|
|
|
* This source code is licensed under the MIT license found in the |
|
419
|
|
|
* LICENSE file in the root directory of this source tree. |
|
420
|
|
|
*/ |
|
421
|
|
|
|
|
422
|
|
|
var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; |
|
423
|
|
|
|
|
424
|
|
|
var ReactPropTypesSecret_1 = ReactPropTypesSecret; |
|
425
|
|
|
|
|
426
|
|
|
var printWarning = function() {}; |
|
427
|
|
|
|
|
428
|
|
|
{ |
|
429
|
|
|
var ReactPropTypesSecret$1 = ReactPropTypesSecret_1; |
|
430
|
|
|
var loggedTypeFailures = {}; |
|
431
|
|
|
var has = Function.call.bind(Object.prototype.hasOwnProperty); |
|
432
|
|
|
|
|
433
|
|
|
printWarning = function(text) { |
|
434
|
|
|
var message = 'Warning: ' + text; |
|
435
|
|
|
if (typeof console !== 'undefined') { |
|
436
|
|
|
console.error(message); |
|
437
|
|
|
} |
|
438
|
|
|
try { |
|
439
|
|
|
// --- Welcome to debugging React --- |
|
440
|
|
|
// This error was thrown as a convenience so that you can use this stack |
|
441
|
|
|
// to find the callsite that caused this warning to fire. |
|
442
|
|
|
throw new Error(message); |
|
443
|
|
|
} catch (x) {} |
|
444
|
|
|
}; |
|
445
|
|
|
} |
|
446
|
|
|
|
|
447
|
|
|
/** |
|
448
|
|
|
* Assert that the values match with the type specs. |
|
449
|
|
|
* Error messages are memorized and will only be shown once. |
|
450
|
|
|
* |
|
451
|
|
|
* @param {object} typeSpecs Map of name to a ReactPropType |
|
452
|
|
|
* @param {object} values Runtime values that need to be type-checked |
|
453
|
|
|
* @param {string} location e.g. "prop", "context", "child context" |
|
454
|
|
|
* @param {string} componentName Name of the component for error messages. |
|
455
|
|
|
* @param {?Function} getStack Returns the component stack. |
|
456
|
|
|
* @private |
|
457
|
|
|
*/ |
|
458
|
|
|
function checkPropTypes(typeSpecs, values, location, componentName, getStack) { |
|
459
|
|
|
{ |
|
460
|
|
|
for (var typeSpecName in typeSpecs) { |
|
461
|
|
|
if (has(typeSpecs, typeSpecName)) { |
|
462
|
|
|
var error; |
|
463
|
|
|
// Prop type validation may throw. In case they do, we don't want to |
|
464
|
|
|
// fail the render phase where it didn't fail before. So we log it. |
|
465
|
|
|
// After these have been cleaned up, we'll let them throw. |
|
466
|
|
|
try { |
|
467
|
|
|
// This is intentionally an invariant that gets caught. It's the same |
|
468
|
|
|
// behavior as without this statement except with a better message. |
|
469
|
|
|
if (typeof typeSpecs[typeSpecName] !== 'function') { |
|
470
|
|
|
var err = Error( |
|
471
|
|
|
(componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + |
|
472
|
|
|
'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' |
|
473
|
|
|
); |
|
474
|
|
|
err.name = 'Invariant Violation'; |
|
475
|
|
|
throw err; |
|
476
|
|
|
} |
|
477
|
|
|
error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1); |
|
478
|
|
|
} catch (ex) { |
|
479
|
|
|
error = ex; |
|
480
|
|
|
} |
|
481
|
|
|
if (error && !(error instanceof Error)) { |
|
482
|
|
|
printWarning( |
|
483
|
|
|
(componentName || 'React class') + ': type specification of ' + |
|
484
|
|
|
location + ' `' + typeSpecName + '` is invalid; the type checker ' + |
|
485
|
|
|
'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + |
|
486
|
|
|
'You may have forgotten to pass an argument to the type checker ' + |
|
487
|
|
|
'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + |
|
488
|
|
|
'shape all require an argument).' |
|
489
|
|
|
); |
|
490
|
|
|
} |
|
491
|
|
|
if (error instanceof Error && !(error.message in loggedTypeFailures)) { |
|
492
|
|
|
// Only monitor this failure once because there tends to be a lot of the |
|
493
|
|
|
// same error. |
|
494
|
|
|
loggedTypeFailures[error.message] = true; |
|
495
|
|
|
|
|
496
|
|
|
var stack = getStack ? getStack() : ''; |
|
497
|
|
|
|
|
498
|
|
|
printWarning( |
|
499
|
|
|
'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '') |
|
500
|
|
|
); |
|
501
|
|
|
} |
|
502
|
|
|
} |
|
503
|
|
|
} |
|
504
|
|
|
} |
|
505
|
|
|
} |
|
506
|
|
|
|
|
507
|
|
|
/** |
|
508
|
|
|
* Resets warning cache when testing. |
|
509
|
|
|
* |
|
510
|
|
|
* @private |
|
511
|
|
|
*/ |
|
512
|
|
|
checkPropTypes.resetWarningCache = function() { |
|
513
|
|
|
{ |
|
514
|
|
|
loggedTypeFailures = {}; |
|
515
|
|
|
} |
|
516
|
|
|
}; |
|
517
|
|
|
|
|
518
|
|
|
var checkPropTypes_1 = checkPropTypes; |
|
519
|
|
|
|
|
520
|
|
|
var has$1 = Function.call.bind(Object.prototype.hasOwnProperty); |
|
521
|
|
|
var printWarning$1 = function() {}; |
|
522
|
|
|
|
|
523
|
|
|
{ |
|
524
|
|
|
printWarning$1 = function(text) { |
|
525
|
|
|
var message = 'Warning: ' + text; |
|
526
|
|
|
if (typeof console !== 'undefined') { |
|
527
|
|
|
console.error(message); |
|
528
|
|
|
} |
|
529
|
|
|
try { |
|
530
|
|
|
// --- Welcome to debugging React --- |
|
531
|
|
|
// This error was thrown as a convenience so that you can use this stack |
|
532
|
|
|
// to find the callsite that caused this warning to fire. |
|
533
|
|
|
throw new Error(message); |
|
534
|
|
|
} catch (x) {} |
|
535
|
|
|
}; |
|
536
|
|
|
} |
|
537
|
|
|
|
|
538
|
|
|
function emptyFunctionThatReturnsNull() { |
|
539
|
|
|
return null; |
|
540
|
|
|
} |
|
541
|
|
|
|
|
542
|
|
|
var factoryWithTypeCheckers = function(isValidElement, throwOnDirectAccess) { |
|
543
|
|
|
/* global Symbol */ |
|
544
|
|
|
var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; |
|
545
|
|
|
var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. |
|
546
|
|
|
|
|
547
|
|
|
/** |
|
548
|
|
|
* Returns the iterator method function contained on the iterable object. |
|
549
|
|
|
* |
|
550
|
|
|
* Be sure to invoke the function with the iterable as context: |
|
551
|
|
|
* |
|
552
|
|
|
* var iteratorFn = getIteratorFn(myIterable); |
|
553
|
|
|
* if (iteratorFn) { |
|
554
|
|
|
* var iterator = iteratorFn.call(myIterable); |
|
555
|
|
|
* ... |
|
556
|
|
|
* } |
|
557
|
|
|
* |
|
558
|
|
|
* @param {?object} maybeIterable |
|
559
|
|
|
* @return {?function} |
|
560
|
|
|
*/ |
|
561
|
|
|
function getIteratorFn(maybeIterable) { |
|
562
|
|
|
var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); |
|
563
|
|
|
if (typeof iteratorFn === 'function') { |
|
564
|
|
|
return iteratorFn; |
|
565
|
|
|
} |
|
566
|
|
|
} |
|
567
|
|
|
|
|
568
|
|
|
/** |
|
569
|
|
|
* Collection of methods that allow declaration and validation of props that are |
|
570
|
|
|
* supplied to React components. Example usage: |
|
571
|
|
|
* |
|
572
|
|
|
* var Props = require('ReactPropTypes'); |
|
573
|
|
|
* var MyArticle = React.createClass({ |
|
574
|
|
|
* propTypes: { |
|
575
|
|
|
* // An optional string prop named "description". |
|
576
|
|
|
* description: Props.string, |
|
577
|
|
|
* |
|
578
|
|
|
* // A required enum prop named "category". |
|
579
|
|
|
* category: Props.oneOf(['News','Photos']).isRequired, |
|
580
|
|
|
* |
|
581
|
|
|
* // A prop named "dialog" that requires an instance of Dialog. |
|
582
|
|
|
* dialog: Props.instanceOf(Dialog).isRequired |
|
583
|
|
|
* }, |
|
584
|
|
|
* render: function() { ... } |
|
585
|
|
|
* }); |
|
586
|
|
|
* |
|
587
|
|
|
* A more formal specification of how these methods are used: |
|
588
|
|
|
* |
|
589
|
|
|
* type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) |
|
590
|
|
|
* decl := ReactPropTypes.{type}(.isRequired)? |
|
591
|
|
|
* |
|
592
|
|
|
* Each and every declaration produces a function with the same signature. This |
|
593
|
|
|
* allows the creation of custom validation functions. For example: |
|
594
|
|
|
* |
|
595
|
|
|
* var MyLink = React.createClass({ |
|
596
|
|
|
* propTypes: { |
|
597
|
|
|
* // An optional string or URI prop named "href". |
|
598
|
|
|
* href: function(props, propName, componentName) { |
|
599
|
|
|
* var propValue = props[propName]; |
|
600
|
|
|
* if (propValue != null && typeof propValue !== 'string' && |
|
601
|
|
|
* !(propValue instanceof URI)) { |
|
602
|
|
|
* return new Error( |
|
603
|
|
|
* 'Expected a string or an URI for ' + propName + ' in ' + |
|
604
|
|
|
* componentName |
|
605
|
|
|
* ); |
|
606
|
|
|
* } |
|
607
|
|
|
* } |
|
608
|
|
|
* }, |
|
609
|
|
|
* render: function() {...} |
|
610
|
|
|
* }); |
|
611
|
|
|
* |
|
612
|
|
|
* @internal |
|
613
|
|
|
*/ |
|
614
|
|
|
|
|
615
|
|
|
var ANONYMOUS = '<<anonymous>>'; |
|
616
|
|
|
|
|
617
|
|
|
// Important! |
|
618
|
|
|
// Keep this list in sync with production version in `./factoryWithThrowingShims.js`. |
|
619
|
|
|
var ReactPropTypes = { |
|
620
|
|
|
array: createPrimitiveTypeChecker('array'), |
|
621
|
|
|
bool: createPrimitiveTypeChecker('boolean'), |
|
622
|
|
|
func: createPrimitiveTypeChecker('function'), |
|
623
|
|
|
number: createPrimitiveTypeChecker('number'), |
|
624
|
|
|
object: createPrimitiveTypeChecker('object'), |
|
625
|
|
|
string: createPrimitiveTypeChecker('string'), |
|
626
|
|
|
symbol: createPrimitiveTypeChecker('symbol'), |
|
627
|
|
|
|
|
628
|
|
|
any: createAnyTypeChecker(), |
|
629
|
|
|
arrayOf: createArrayOfTypeChecker, |
|
630
|
|
|
element: createElementTypeChecker(), |
|
631
|
|
|
elementType: createElementTypeTypeChecker(), |
|
632
|
|
|
instanceOf: createInstanceTypeChecker, |
|
633
|
|
|
node: createNodeChecker(), |
|
634
|
|
|
objectOf: createObjectOfTypeChecker, |
|
635
|
|
|
oneOf: createEnumTypeChecker, |
|
636
|
|
|
oneOfType: createUnionTypeChecker, |
|
637
|
|
|
shape: createShapeTypeChecker, |
|
638
|
|
|
exact: createStrictShapeTypeChecker, |
|
639
|
|
|
}; |
|
640
|
|
|
|
|
641
|
|
|
/** |
|
642
|
|
|
* inlined Object.is polyfill to avoid requiring consumers ship their own |
|
643
|
|
|
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is |
|
644
|
|
|
*/ |
|
645
|
|
|
/*eslint-disable no-self-compare*/ |
|
646
|
|
|
function is(x, y) { |
|
647
|
|
|
// SameValue algorithm |
|
648
|
|
|
if (x === y) { |
|
649
|
|
|
// Steps 1-5, 7-10 |
|
650
|
|
|
// Steps 6.b-6.e: +0 != -0 |
|
651
|
|
|
return x !== 0 || 1 / x === 1 / y; |
|
652
|
|
|
} else { |
|
653
|
|
|
// Step 6.a: NaN == NaN |
|
654
|
|
|
return x !== x && y !== y; |
|
655
|
|
|
} |
|
656
|
|
|
} |
|
657
|
|
|
/*eslint-enable no-self-compare*/ |
|
658
|
|
|
|
|
659
|
|
|
/** |
|
660
|
|
|
* We use an Error-like object for backward compatibility as people may call |
|
661
|
|
|
* PropTypes directly and inspect their output. However, we don't use real |
|
662
|
|
|
* Errors anymore. We don't inspect their stack anyway, and creating them |
|
663
|
|
|
* is prohibitively expensive if they are created too often, such as what |
|
664
|
|
|
* happens in oneOfType() for any type before the one that matched. |
|
665
|
|
|
*/ |
|
666
|
|
|
function PropTypeError(message) { |
|
667
|
|
|
this.message = message; |
|
668
|
|
|
this.stack = ''; |
|
669
|
|
|
} |
|
670
|
|
|
// Make `instanceof Error` still work for returned errors. |
|
671
|
|
|
PropTypeError.prototype = Error.prototype; |
|
672
|
|
|
|
|
673
|
|
|
function createChainableTypeChecker(validate) { |
|
674
|
|
|
{ |
|
675
|
|
|
var manualPropTypeCallCache = {}; |
|
676
|
|
|
var manualPropTypeWarningCount = 0; |
|
677
|
|
|
} |
|
678
|
|
|
function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { |
|
679
|
|
|
componentName = componentName || ANONYMOUS; |
|
680
|
|
|
propFullName = propFullName || propName; |
|
681
|
|
|
|
|
682
|
|
|
if (secret !== ReactPropTypesSecret_1) { |
|
683
|
|
|
if (throwOnDirectAccess) { |
|
684
|
|
|
// New behavior only for users of `prop-types` package |
|
685
|
|
|
var err = new Error( |
|
686
|
|
|
'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + |
|
687
|
|
|
'Use `PropTypes.checkPropTypes()` to call them. ' + |
|
688
|
|
|
'Read more at http://fb.me/use-check-prop-types' |
|
689
|
|
|
); |
|
690
|
|
|
err.name = 'Invariant Violation'; |
|
691
|
|
|
throw err; |
|
692
|
|
|
} else if ( typeof console !== 'undefined') { |
|
693
|
|
|
// Old behavior for people using React.PropTypes |
|
694
|
|
|
var cacheKey = componentName + ':' + propName; |
|
695
|
|
|
if ( |
|
696
|
|
|
!manualPropTypeCallCache[cacheKey] && |
|
697
|
|
|
// Avoid spamming the console because they are often not actionable except for lib authors |
|
698
|
|
|
manualPropTypeWarningCount < 3 |
|
699
|
|
|
) { |
|
700
|
|
|
printWarning$1( |
|
701
|
|
|
'You are manually calling a React.PropTypes validation ' + |
|
702
|
|
|
'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + |
|
703
|
|
|
'and will throw in the standalone `prop-types` package. ' + |
|
704
|
|
|
'You may be seeing this warning due to a third-party PropTypes ' + |
|
705
|
|
|
'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.' |
|
706
|
|
|
); |
|
707
|
|
|
manualPropTypeCallCache[cacheKey] = true; |
|
708
|
|
|
manualPropTypeWarningCount++; |
|
709
|
|
|
} |
|
710
|
|
|
} |
|
711
|
|
|
} |
|
712
|
|
|
if (props[propName] == null) { |
|
713
|
|
|
if (isRequired) { |
|
714
|
|
|
if (props[propName] === null) { |
|
715
|
|
|
return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); |
|
716
|
|
|
} |
|
717
|
|
|
return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); |
|
718
|
|
|
} |
|
719
|
|
|
return null; |
|
720
|
|
|
} else { |
|
721
|
|
|
return validate(props, propName, componentName, location, propFullName); |
|
722
|
|
|
} |
|
723
|
|
|
} |
|
724
|
|
|
|
|
725
|
|
|
var chainedCheckType = checkType.bind(null, false); |
|
726
|
|
|
chainedCheckType.isRequired = checkType.bind(null, true); |
|
727
|
|
|
|
|
728
|
|
|
return chainedCheckType; |
|
729
|
|
|
} |
|
730
|
|
|
|
|
731
|
|
|
function createPrimitiveTypeChecker(expectedType) { |
|
732
|
|
|
function validate(props, propName, componentName, location, propFullName, secret) { |
|
733
|
|
|
var propValue = props[propName]; |
|
734
|
|
|
var propType = getPropType(propValue); |
|
735
|
|
|
if (propType !== expectedType) { |
|
736
|
|
|
// `propValue` being instance of, say, date/regexp, pass the 'object' |
|
737
|
|
|
// check, but we can offer a more precise error message here rather than |
|
738
|
|
|
// 'of type `object`'. |
|
739
|
|
|
var preciseType = getPreciseType(propValue); |
|
740
|
|
|
|
|
741
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); |
|
742
|
|
|
} |
|
743
|
|
|
return null; |
|
744
|
|
|
} |
|
745
|
|
|
return createChainableTypeChecker(validate); |
|
746
|
|
|
} |
|
747
|
|
|
|
|
748
|
|
|
function createAnyTypeChecker() { |
|
749
|
|
|
return createChainableTypeChecker(emptyFunctionThatReturnsNull); |
|
750
|
|
|
} |
|
751
|
|
|
|
|
752
|
|
|
function createArrayOfTypeChecker(typeChecker) { |
|
753
|
|
|
function validate(props, propName, componentName, location, propFullName) { |
|
754
|
|
|
if (typeof typeChecker !== 'function') { |
|
755
|
|
|
return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); |
|
756
|
|
|
} |
|
757
|
|
|
var propValue = props[propName]; |
|
758
|
|
|
if (!Array.isArray(propValue)) { |
|
759
|
|
|
var propType = getPropType(propValue); |
|
760
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); |
|
761
|
|
|
} |
|
762
|
|
|
for (var i = 0; i < propValue.length; i++) { |
|
763
|
|
|
var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret_1); |
|
764
|
|
|
if (error instanceof Error) { |
|
765
|
|
|
return error; |
|
766
|
|
|
} |
|
767
|
|
|
} |
|
768
|
|
|
return null; |
|
769
|
|
|
} |
|
770
|
|
|
return createChainableTypeChecker(validate); |
|
771
|
|
|
} |
|
772
|
|
|
|
|
773
|
|
|
function createElementTypeChecker() { |
|
774
|
|
|
function validate(props, propName, componentName, location, propFullName) { |
|
775
|
|
|
var propValue = props[propName]; |
|
776
|
|
|
if (!isValidElement(propValue)) { |
|
777
|
|
|
var propType = getPropType(propValue); |
|
778
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); |
|
779
|
|
|
} |
|
780
|
|
|
return null; |
|
781
|
|
|
} |
|
782
|
|
|
return createChainableTypeChecker(validate); |
|
783
|
|
|
} |
|
784
|
|
|
|
|
785
|
|
|
function createElementTypeTypeChecker() { |
|
786
|
|
|
function validate(props, propName, componentName, location, propFullName) { |
|
787
|
|
|
var propValue = props[propName]; |
|
788
|
|
|
if (!reactIs.isValidElementType(propValue)) { |
|
789
|
|
|
var propType = getPropType(propValue); |
|
790
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.')); |
|
791
|
|
|
} |
|
792
|
|
|
return null; |
|
793
|
|
|
} |
|
794
|
|
|
return createChainableTypeChecker(validate); |
|
795
|
|
|
} |
|
796
|
|
|
|
|
797
|
|
|
function createInstanceTypeChecker(expectedClass) { |
|
798
|
|
|
function validate(props, propName, componentName, location, propFullName) { |
|
799
|
|
|
if (!(props[propName] instanceof expectedClass)) { |
|
800
|
|
|
var expectedClassName = expectedClass.name || ANONYMOUS; |
|
801
|
|
|
var actualClassName = getClassName(props[propName]); |
|
802
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); |
|
803
|
|
|
} |
|
804
|
|
|
return null; |
|
805
|
|
|
} |
|
806
|
|
|
return createChainableTypeChecker(validate); |
|
807
|
|
|
} |
|
808
|
|
|
|
|
809
|
|
|
function createEnumTypeChecker(expectedValues) { |
|
810
|
|
|
if (!Array.isArray(expectedValues)) { |
|
811
|
|
|
{ |
|
812
|
|
|
if (arguments.length > 1) { |
|
813
|
|
|
printWarning$1( |
|
814
|
|
|
'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + |
|
815
|
|
|
'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).' |
|
816
|
|
|
); |
|
817
|
|
|
} else { |
|
818
|
|
|
printWarning$1('Invalid argument supplied to oneOf, expected an array.'); |
|
819
|
|
|
} |
|
820
|
|
|
} |
|
821
|
|
|
return emptyFunctionThatReturnsNull; |
|
822
|
|
|
} |
|
823
|
|
|
|
|
824
|
|
|
function validate(props, propName, componentName, location, propFullName) { |
|
825
|
|
|
var propValue = props[propName]; |
|
826
|
|
|
for (var i = 0; i < expectedValues.length; i++) { |
|
827
|
|
|
if (is(propValue, expectedValues[i])) { |
|
828
|
|
|
return null; |
|
829
|
|
|
} |
|
830
|
|
|
} |
|
831
|
|
|
|
|
832
|
|
|
var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { |
|
833
|
|
|
var type = getPreciseType(value); |
|
834
|
|
|
if (type === 'symbol') { |
|
835
|
|
|
return String(value); |
|
836
|
|
|
} |
|
837
|
|
|
return value; |
|
838
|
|
|
}); |
|
839
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); |
|
840
|
|
|
} |
|
841
|
|
|
return createChainableTypeChecker(validate); |
|
842
|
|
|
} |
|
843
|
|
|
|
|
844
|
|
|
function createObjectOfTypeChecker(typeChecker) { |
|
845
|
|
|
function validate(props, propName, componentName, location, propFullName) { |
|
846
|
|
|
if (typeof typeChecker !== 'function') { |
|
847
|
|
|
return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); |
|
848
|
|
|
} |
|
849
|
|
|
var propValue = props[propName]; |
|
850
|
|
|
var propType = getPropType(propValue); |
|
851
|
|
|
if (propType !== 'object') { |
|
852
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); |
|
853
|
|
|
} |
|
854
|
|
|
for (var key in propValue) { |
|
855
|
|
|
if (has$1(propValue, key)) { |
|
856
|
|
|
var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1); |
|
857
|
|
|
if (error instanceof Error) { |
|
858
|
|
|
return error; |
|
859
|
|
|
} |
|
860
|
|
|
} |
|
861
|
|
|
} |
|
862
|
|
|
return null; |
|
863
|
|
|
} |
|
864
|
|
|
return createChainableTypeChecker(validate); |
|
865
|
|
|
} |
|
866
|
|
|
|
|
867
|
|
|
function createUnionTypeChecker(arrayOfTypeCheckers) { |
|
868
|
|
|
if (!Array.isArray(arrayOfTypeCheckers)) { |
|
869
|
|
|
printWarning$1('Invalid argument supplied to oneOfType, expected an instance of array.') ; |
|
870
|
|
|
return emptyFunctionThatReturnsNull; |
|
871
|
|
|
} |
|
872
|
|
|
|
|
873
|
|
|
for (var i = 0; i < arrayOfTypeCheckers.length; i++) { |
|
874
|
|
|
var checker = arrayOfTypeCheckers[i]; |
|
875
|
|
|
if (typeof checker !== 'function') { |
|
876
|
|
|
printWarning$1( |
|
877
|
|
|
'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + |
|
878
|
|
|
'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.' |
|
879
|
|
|
); |
|
880
|
|
|
return emptyFunctionThatReturnsNull; |
|
881
|
|
|
} |
|
882
|
|
|
} |
|
883
|
|
|
|
|
884
|
|
|
function validate(props, propName, componentName, location, propFullName) { |
|
885
|
|
|
for (var i = 0; i < arrayOfTypeCheckers.length; i++) { |
|
886
|
|
|
var checker = arrayOfTypeCheckers[i]; |
|
887
|
|
|
if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret_1) == null) { |
|
888
|
|
|
return null; |
|
889
|
|
|
} |
|
890
|
|
|
} |
|
891
|
|
|
|
|
892
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); |
|
893
|
|
|
} |
|
894
|
|
|
return createChainableTypeChecker(validate); |
|
895
|
|
|
} |
|
896
|
|
|
|
|
897
|
|
|
function createNodeChecker() { |
|
898
|
|
|
function validate(props, propName, componentName, location, propFullName) { |
|
899
|
|
|
if (!isNode(props[propName])) { |
|
900
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); |
|
901
|
|
|
} |
|
902
|
|
|
return null; |
|
903
|
|
|
} |
|
904
|
|
|
return createChainableTypeChecker(validate); |
|
905
|
|
|
} |
|
906
|
|
|
|
|
907
|
|
|
function createShapeTypeChecker(shapeTypes) { |
|
908
|
|
|
function validate(props, propName, componentName, location, propFullName) { |
|
909
|
|
|
var propValue = props[propName]; |
|
910
|
|
|
var propType = getPropType(propValue); |
|
911
|
|
|
if (propType !== 'object') { |
|
912
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); |
|
913
|
|
|
} |
|
914
|
|
|
for (var key in shapeTypes) { |
|
915
|
|
|
var checker = shapeTypes[key]; |
|
916
|
|
|
if (!checker) { |
|
917
|
|
|
continue; |
|
918
|
|
|
} |
|
919
|
|
|
var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1); |
|
920
|
|
|
if (error) { |
|
921
|
|
|
return error; |
|
922
|
|
|
} |
|
923
|
|
|
} |
|
924
|
|
|
return null; |
|
925
|
|
|
} |
|
926
|
|
|
return createChainableTypeChecker(validate); |
|
927
|
|
|
} |
|
928
|
|
|
|
|
929
|
|
|
function createStrictShapeTypeChecker(shapeTypes) { |
|
930
|
|
|
function validate(props, propName, componentName, location, propFullName) { |
|
931
|
|
|
var propValue = props[propName]; |
|
932
|
|
|
var propType = getPropType(propValue); |
|
933
|
|
|
if (propType !== 'object') { |
|
934
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); |
|
935
|
|
|
} |
|
936
|
|
|
// We need to check all keys in case some are required but missing from |
|
937
|
|
|
// props. |
|
938
|
|
|
var allKeys = objectAssign({}, props[propName], shapeTypes); |
|
939
|
|
|
for (var key in allKeys) { |
|
940
|
|
|
var checker = shapeTypes[key]; |
|
941
|
|
|
if (!checker) { |
|
942
|
|
|
return new PropTypeError( |
|
943
|
|
|
'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + |
|
944
|
|
|
'\nBad object: ' + JSON.stringify(props[propName], null, ' ') + |
|
945
|
|
|
'\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ') |
|
946
|
|
|
); |
|
947
|
|
|
} |
|
948
|
|
|
var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1); |
|
949
|
|
|
if (error) { |
|
950
|
|
|
return error; |
|
951
|
|
|
} |
|
952
|
|
|
} |
|
953
|
|
|
return null; |
|
954
|
|
|
} |
|
955
|
|
|
|
|
956
|
|
|
return createChainableTypeChecker(validate); |
|
957
|
|
|
} |
|
958
|
|
|
|
|
959
|
|
|
function isNode(propValue) { |
|
960
|
|
|
switch (typeof propValue) { |
|
961
|
|
|
case 'number': |
|
962
|
|
|
case 'string': |
|
963
|
|
|
case 'undefined': |
|
964
|
|
|
return true; |
|
965
|
|
|
case 'boolean': |
|
966
|
|
|
return !propValue; |
|
967
|
|
|
case 'object': |
|
968
|
|
|
if (Array.isArray(propValue)) { |
|
969
|
|
|
return propValue.every(isNode); |
|
970
|
|
|
} |
|
971
|
|
|
if (propValue === null || isValidElement(propValue)) { |
|
972
|
|
|
return true; |
|
973
|
|
|
} |
|
974
|
|
|
|
|
975
|
|
|
var iteratorFn = getIteratorFn(propValue); |
|
976
|
|
|
if (iteratorFn) { |
|
977
|
|
|
var iterator = iteratorFn.call(propValue); |
|
978
|
|
|
var step; |
|
979
|
|
|
if (iteratorFn !== propValue.entries) { |
|
980
|
|
|
while (!(step = iterator.next()).done) { |
|
981
|
|
|
if (!isNode(step.value)) { |
|
982
|
|
|
return false; |
|
983
|
|
|
} |
|
984
|
|
|
} |
|
985
|
|
|
} else { |
|
986
|
|
|
// Iterator will provide entry [k,v] tuples rather than values. |
|
987
|
|
|
while (!(step = iterator.next()).done) { |
|
988
|
|
|
var entry = step.value; |
|
989
|
|
|
if (entry) { |
|
990
|
|
|
if (!isNode(entry[1])) { |
|
991
|
|
|
return false; |
|
992
|
|
|
} |
|
993
|
|
|
} |
|
994
|
|
|
} |
|
995
|
|
|
} |
|
996
|
|
|
} else { |
|
997
|
|
|
return false; |
|
998
|
|
|
} |
|
999
|
|
|
|
|
1000
|
|
|
return true; |
|
1001
|
|
|
default: |
|
1002
|
|
|
return false; |
|
1003
|
|
|
} |
|
1004
|
|
|
} |
|
1005
|
|
|
|
|
1006
|
|
|
function isSymbol(propType, propValue) { |
|
1007
|
|
|
// Native Symbol. |
|
1008
|
|
|
if (propType === 'symbol') { |
|
1009
|
|
|
return true; |
|
1010
|
|
|
} |
|
1011
|
|
|
|
|
1012
|
|
|
// falsy value can't be a Symbol |
|
1013
|
|
|
if (!propValue) { |
|
1014
|
|
|
return false; |
|
1015
|
|
|
} |
|
1016
|
|
|
|
|
1017
|
|
|
// 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' |
|
1018
|
|
|
if (propValue['@@toStringTag'] === 'Symbol') { |
|
1019
|
|
|
return true; |
|
1020
|
|
|
} |
|
1021
|
|
|
|
|
1022
|
|
|
// Fallback for non-spec compliant Symbols which are polyfilled. |
|
1023
|
|
|
if (typeof Symbol === 'function' && propValue instanceof Symbol) { |
|
1024
|
|
|
return true; |
|
1025
|
|
|
} |
|
1026
|
|
|
|
|
1027
|
|
|
return false; |
|
1028
|
|
|
} |
|
1029
|
|
|
|
|
1030
|
|
|
// Equivalent of `typeof` but with special handling for array and regexp. |
|
1031
|
|
|
function getPropType(propValue) { |
|
1032
|
|
|
var propType = typeof propValue; |
|
1033
|
|
|
if (Array.isArray(propValue)) { |
|
1034
|
|
|
return 'array'; |
|
1035
|
|
|
} |
|
1036
|
|
|
if (propValue instanceof RegExp) { |
|
1037
|
|
|
// Old webkits (at least until Android 4.0) return 'function' rather than |
|
1038
|
|
|
// 'object' for typeof a RegExp. We'll normalize this here so that /bla/ |
|
1039
|
|
|
// passes PropTypes.object. |
|
1040
|
|
|
return 'object'; |
|
1041
|
|
|
} |
|
1042
|
|
|
if (isSymbol(propType, propValue)) { |
|
1043
|
|
|
return 'symbol'; |
|
1044
|
|
|
} |
|
1045
|
|
|
return propType; |
|
1046
|
|
|
} |
|
1047
|
|
|
|
|
1048
|
|
|
// This handles more types than `getPropType`. Only used for error messages. |
|
1049
|
|
|
// See `createPrimitiveTypeChecker`. |
|
1050
|
|
|
function getPreciseType(propValue) { |
|
1051
|
|
|
if (typeof propValue === 'undefined' || propValue === null) { |
|
1052
|
|
|
return '' + propValue; |
|
1053
|
|
|
} |
|
1054
|
|
|
var propType = getPropType(propValue); |
|
1055
|
|
|
if (propType === 'object') { |
|
1056
|
|
|
if (propValue instanceof Date) { |
|
1057
|
|
|
return 'date'; |
|
1058
|
|
|
} else if (propValue instanceof RegExp) { |
|
1059
|
|
|
return 'regexp'; |
|
1060
|
|
|
} |
|
1061
|
|
|
} |
|
1062
|
|
|
return propType; |
|
1063
|
|
|
} |
|
1064
|
|
|
|
|
1065
|
|
|
// Returns a string that is postfixed to a warning about an invalid type. |
|
1066
|
|
|
// For example, "undefined" or "of type array" |
|
1067
|
|
|
function getPostfixForTypeWarning(value) { |
|
1068
|
|
|
var type = getPreciseType(value); |
|
1069
|
|
|
switch (type) { |
|
1070
|
|
|
case 'array': |
|
1071
|
|
|
case 'object': |
|
1072
|
|
|
return 'an ' + type; |
|
1073
|
|
|
case 'boolean': |
|
1074
|
|
|
case 'date': |
|
1075
|
|
|
case 'regexp': |
|
1076
|
|
|
return 'a ' + type; |
|
1077
|
|
|
default: |
|
1078
|
|
|
return type; |
|
1079
|
|
|
} |
|
1080
|
|
|
} |
|
1081
|
|
|
|
|
1082
|
|
|
// Returns class name of the object, if any. |
|
1083
|
|
|
function getClassName(propValue) { |
|
1084
|
|
|
if (!propValue.constructor || !propValue.constructor.name) { |
|
1085
|
|
|
return ANONYMOUS; |
|
1086
|
|
|
} |
|
1087
|
|
|
return propValue.constructor.name; |
|
1088
|
|
|
} |
|
1089
|
|
|
|
|
1090
|
|
|
ReactPropTypes.checkPropTypes = checkPropTypes_1; |
|
1091
|
|
|
ReactPropTypes.resetWarningCache = checkPropTypes_1.resetWarningCache; |
|
1092
|
|
|
ReactPropTypes.PropTypes = ReactPropTypes; |
|
1093
|
|
|
|
|
1094
|
|
|
return ReactPropTypes; |
|
1095
|
|
|
}; |
|
1096
|
|
|
|
|
1097
|
|
|
var propTypes = createCommonjsModule(function (module) { |
|
1098
|
|
|
/** |
|
1099
|
|
|
* Copyright (c) 2013-present, Facebook, Inc. |
|
1100
|
|
|
* |
|
1101
|
|
|
* This source code is licensed under the MIT license found in the |
|
1102
|
|
|
* LICENSE file in the root directory of this source tree. |
|
1103
|
|
|
*/ |
|
1104
|
|
|
|
|
1105
|
|
|
{ |
|
1106
|
|
|
var ReactIs = reactIs; |
|
1107
|
|
|
|
|
1108
|
|
|
// By explicitly using `prop-types` you are opting into new development behavior. |
|
1109
|
|
|
// http://fb.me/prop-types-in-prod |
|
1110
|
|
|
var throwOnDirectAccess = true; |
|
1111
|
|
|
module.exports = factoryWithTypeCheckers(ReactIs.isElement, throwOnDirectAccess); |
|
1112
|
|
|
} |
|
1113
|
|
|
}); |
|
1114
|
|
|
|
|
1115
|
|
|
function _extends() { |
|
1116
|
|
|
_extends = Object.assign || function (target) { |
|
1117
|
|
|
for (var i = 1; i < arguments.length; i++) { |
|
1118
|
|
|
var source = arguments[i]; |
|
1119
|
|
|
|
|
1120
|
|
|
for (var key in source) { |
|
1121
|
|
|
if (Object.prototype.hasOwnProperty.call(source, key)) { |
|
1122
|
|
|
target[key] = source[key]; |
|
1123
|
|
|
} |
|
1124
|
|
|
} |
|
1125
|
|
|
} |
|
1126
|
|
|
|
|
1127
|
|
|
return target; |
|
1128
|
|
|
}; |
|
1129
|
|
|
|
|
1130
|
|
|
return _extends.apply(this, arguments); |
|
1131
|
|
|
} |
|
1132
|
|
|
|
|
1133
|
|
|
function isAbsolute(pathname) { |
|
1134
|
|
|
return pathname.charAt(0) === '/'; |
|
1135
|
|
|
} |
|
1136
|
|
|
|
|
1137
|
|
|
// About 1.5x faster than the two-arg version of Array#splice() |
|
1138
|
|
|
function spliceOne(list, index) { |
|
1139
|
|
|
for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) { |
|
1140
|
|
|
list[i] = list[k]; |
|
1141
|
|
|
} |
|
1142
|
|
|
|
|
1143
|
|
|
list.pop(); |
|
1144
|
|
|
} |
|
1145
|
|
|
|
|
1146
|
|
|
// This implementation is based heavily on node's url.parse |
|
1147
|
|
|
function resolvePathname(to) { |
|
1148
|
|
|
var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; |
|
1149
|
|
|
|
|
1150
|
|
|
var toParts = to && to.split('/') || []; |
|
1151
|
|
|
var fromParts = from && from.split('/') || []; |
|
1152
|
|
|
|
|
1153
|
|
|
var isToAbs = to && isAbsolute(to); |
|
1154
|
|
|
var isFromAbs = from && isAbsolute(from); |
|
1155
|
|
|
var mustEndAbs = isToAbs || isFromAbs; |
|
1156
|
|
|
|
|
1157
|
|
|
if (to && isAbsolute(to)) { |
|
1158
|
|
|
// to is absolute |
|
1159
|
|
|
fromParts = toParts; |
|
1160
|
|
|
} else if (toParts.length) { |
|
1161
|
|
|
// to is relative, drop the filename |
|
1162
|
|
|
fromParts.pop(); |
|
1163
|
|
|
fromParts = fromParts.concat(toParts); |
|
1164
|
|
|
} |
|
1165
|
|
|
|
|
1166
|
|
|
if (!fromParts.length) return '/'; |
|
1167
|
|
|
|
|
1168
|
|
|
var hasTrailingSlash = void 0; |
|
1169
|
|
|
if (fromParts.length) { |
|
1170
|
|
|
var last = fromParts[fromParts.length - 1]; |
|
1171
|
|
|
hasTrailingSlash = last === '.' || last === '..' || last === ''; |
|
1172
|
|
|
} else { |
|
1173
|
|
|
hasTrailingSlash = false; |
|
1174
|
|
|
} |
|
1175
|
|
|
|
|
1176
|
|
|
var up = 0; |
|
1177
|
|
|
for (var i = fromParts.length; i >= 0; i--) { |
|
1178
|
|
|
var part = fromParts[i]; |
|
1179
|
|
|
|
|
1180
|
|
|
if (part === '.') { |
|
1181
|
|
|
spliceOne(fromParts, i); |
|
1182
|
|
|
} else if (part === '..') { |
|
1183
|
|
|
spliceOne(fromParts, i); |
|
1184
|
|
|
up++; |
|
1185
|
|
|
} else if (up) { |
|
1186
|
|
|
spliceOne(fromParts, i); |
|
1187
|
|
|
up--; |
|
1188
|
|
|
} |
|
1189
|
|
|
} |
|
1190
|
|
|
|
|
1191
|
|
|
if (!mustEndAbs) for (; up--; up) { |
|
1192
|
|
|
fromParts.unshift('..'); |
|
1193
|
|
|
}if (mustEndAbs && fromParts[0] !== '' && (!fromParts[0] || !isAbsolute(fromParts[0]))) fromParts.unshift(''); |
|
1194
|
|
|
|
|
1195
|
|
|
var result = fromParts.join('/'); |
|
1196
|
|
|
|
|
1197
|
|
|
if (hasTrailingSlash && result.substr(-1) !== '/') result += '/'; |
|
1198
|
|
|
|
|
1199
|
|
|
return result; |
|
1200
|
|
|
} |
|
1201
|
|
|
|
|
1202
|
|
|
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; |
|
1203
|
|
|
|
|
1204
|
|
|
function valueEqual(a, b) { |
|
1205
|
|
|
if (a === b) return true; |
|
1206
|
|
|
|
|
1207
|
|
|
if (a == null || b == null) return false; |
|
1208
|
|
|
|
|
1209
|
|
|
if (Array.isArray(a)) { |
|
1210
|
|
|
return Array.isArray(b) && a.length === b.length && a.every(function (item, index) { |
|
1211
|
|
|
return valueEqual(item, b[index]); |
|
1212
|
|
|
}); |
|
1213
|
|
|
} |
|
1214
|
|
|
|
|
1215
|
|
|
var aType = typeof a === 'undefined' ? 'undefined' : _typeof(a); |
|
1216
|
|
|
var bType = typeof b === 'undefined' ? 'undefined' : _typeof(b); |
|
1217
|
|
|
|
|
1218
|
|
|
if (aType !== bType) return false; |
|
1219
|
|
|
|
|
1220
|
|
|
if (aType === 'object') { |
|
1221
|
|
|
var aValue = a.valueOf(); |
|
1222
|
|
|
var bValue = b.valueOf(); |
|
1223
|
|
|
|
|
1224
|
|
|
if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue); |
|
1225
|
|
|
|
|
1226
|
|
|
var aKeys = Object.keys(a); |
|
1227
|
|
|
var bKeys = Object.keys(b); |
|
1228
|
|
|
|
|
1229
|
|
|
if (aKeys.length !== bKeys.length) return false; |
|
1230
|
|
|
|
|
1231
|
|
|
return aKeys.every(function (key) { |
|
1232
|
|
|
return valueEqual(a[key], b[key]); |
|
1233
|
|
|
}); |
|
1234
|
|
|
} |
|
1235
|
|
|
|
|
1236
|
|
|
return false; |
|
1237
|
|
|
} |
|
1238
|
|
|
|
|
1239
|
|
|
function warning(condition, message) { |
|
1240
|
|
|
{ |
|
1241
|
|
|
if (condition) { |
|
1242
|
|
|
return; |
|
1243
|
|
|
} |
|
1244
|
|
|
|
|
1245
|
|
|
var text = "Warning: " + message; |
|
1246
|
|
|
|
|
1247
|
|
|
if (typeof console !== 'undefined') { |
|
1248
|
|
|
console.warn(text); |
|
1249
|
|
|
} |
|
1250
|
|
|
|
|
1251
|
|
|
try { |
|
1252
|
|
|
throw Error(text); |
|
1253
|
|
|
} catch (x) {} |
|
1254
|
|
|
} |
|
1255
|
|
|
} |
|
1256
|
|
|
|
|
1257
|
|
|
var prefix = 'Invariant failed'; |
|
1258
|
|
|
function invariant(condition, message) { |
|
1259
|
|
|
if (condition) { |
|
1260
|
|
|
return; |
|
1261
|
|
|
} |
|
1262
|
|
|
|
|
1263
|
|
|
{ |
|
1264
|
|
|
throw new Error(prefix + ": " + (message || '')); |
|
1265
|
|
|
} |
|
1266
|
|
|
} |
|
1267
|
|
|
|
|
1268
|
|
|
function addLeadingSlash(path) { |
|
1269
|
|
|
return path.charAt(0) === '/' ? path : '/' + path; |
|
1270
|
|
|
} |
|
1271
|
|
|
function stripLeadingSlash(path) { |
|
1272
|
|
|
return path.charAt(0) === '/' ? path.substr(1) : path; |
|
1273
|
|
|
} |
|
1274
|
|
|
function hasBasename(path, prefix) { |
|
1275
|
|
|
return new RegExp('^' + prefix + '(\\/|\\?|#|$)', 'i').test(path); |
|
1276
|
|
|
} |
|
1277
|
|
|
function stripBasename(path, prefix) { |
|
1278
|
|
|
return hasBasename(path, prefix) ? path.substr(prefix.length) : path; |
|
1279
|
|
|
} |
|
1280
|
|
|
function stripTrailingSlash(path) { |
|
1281
|
|
|
return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path; |
|
1282
|
|
|
} |
|
1283
|
|
|
function parsePath(path) { |
|
1284
|
|
|
var pathname = path || '/'; |
|
1285
|
|
|
var search = ''; |
|
1286
|
|
|
var hash = ''; |
|
1287
|
|
|
var hashIndex = pathname.indexOf('#'); |
|
1288
|
|
|
|
|
1289
|
|
|
if (hashIndex !== -1) { |
|
1290
|
|
|
hash = pathname.substr(hashIndex); |
|
1291
|
|
|
pathname = pathname.substr(0, hashIndex); |
|
1292
|
|
|
} |
|
1293
|
|
|
|
|
1294
|
|
|
var searchIndex = pathname.indexOf('?'); |
|
1295
|
|
|
|
|
1296
|
|
|
if (searchIndex !== -1) { |
|
1297
|
|
|
search = pathname.substr(searchIndex); |
|
1298
|
|
|
pathname = pathname.substr(0, searchIndex); |
|
1299
|
|
|
} |
|
1300
|
|
|
|
|
1301
|
|
|
return { |
|
1302
|
|
|
pathname: pathname, |
|
1303
|
|
|
search: search === '?' ? '' : search, |
|
1304
|
|
|
hash: hash === '#' ? '' : hash |
|
1305
|
|
|
}; |
|
1306
|
|
|
} |
|
1307
|
|
|
function createPath(location) { |
|
1308
|
|
|
var pathname = location.pathname, |
|
1309
|
|
|
search = location.search, |
|
1310
|
|
|
hash = location.hash; |
|
1311
|
|
|
var path = pathname || '/'; |
|
1312
|
|
|
if (search && search !== '?') path += search.charAt(0) === '?' ? search : "?" + search; |
|
1313
|
|
|
if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : "#" + hash; |
|
1314
|
|
|
return path; |
|
1315
|
|
|
} |
|
1316
|
|
|
|
|
1317
|
|
|
function createLocation(path, state, key, currentLocation) { |
|
1318
|
|
|
var location; |
|
1319
|
|
|
|
|
1320
|
|
|
if (typeof path === 'string') { |
|
1321
|
|
|
// Two-arg form: push(path, state) |
|
1322
|
|
|
location = parsePath(path); |
|
1323
|
|
|
location.state = state; |
|
1324
|
|
|
} else { |
|
1325
|
|
|
// One-arg form: push(location) |
|
1326
|
|
|
location = _extends({}, path); |
|
1327
|
|
|
if (location.pathname === undefined) location.pathname = ''; |
|
1328
|
|
|
|
|
1329
|
|
|
if (location.search) { |
|
1330
|
|
|
if (location.search.charAt(0) !== '?') location.search = '?' + location.search; |
|
1331
|
|
|
} else { |
|
1332
|
|
|
location.search = ''; |
|
1333
|
|
|
} |
|
1334
|
|
|
|
|
1335
|
|
|
if (location.hash) { |
|
1336
|
|
|
if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash; |
|
1337
|
|
|
} else { |
|
1338
|
|
|
location.hash = ''; |
|
1339
|
|
|
} |
|
1340
|
|
|
|
|
1341
|
|
|
if (state !== undefined && location.state === undefined) location.state = state; |
|
1342
|
|
|
} |
|
1343
|
|
|
|
|
1344
|
|
|
try { |
|
1345
|
|
|
location.pathname = decodeURI(location.pathname); |
|
1346
|
|
|
} catch (e) { |
|
1347
|
|
|
if (e instanceof URIError) { |
|
1348
|
|
|
throw new URIError('Pathname "' + location.pathname + '" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.'); |
|
1349
|
|
|
} else { |
|
1350
|
|
|
throw e; |
|
1351
|
|
|
} |
|
1352
|
|
|
} |
|
1353
|
|
|
|
|
1354
|
|
|
if (key) location.key = key; |
|
1355
|
|
|
|
|
1356
|
|
|
if (currentLocation) { |
|
1357
|
|
|
// Resolve incomplete/relative pathname relative to current location. |
|
1358
|
|
|
if (!location.pathname) { |
|
1359
|
|
|
location.pathname = currentLocation.pathname; |
|
1360
|
|
|
} else if (location.pathname.charAt(0) !== '/') { |
|
1361
|
|
|
location.pathname = resolvePathname(location.pathname, currentLocation.pathname); |
|
1362
|
|
|
} |
|
1363
|
|
|
} else { |
|
1364
|
|
|
// When there is no prior location and pathname is empty, set it to / |
|
1365
|
|
|
if (!location.pathname) { |
|
1366
|
|
|
location.pathname = '/'; |
|
1367
|
|
|
} |
|
1368
|
|
|
} |
|
1369
|
|
|
|
|
1370
|
|
|
return location; |
|
1371
|
|
|
} |
|
1372
|
|
|
function locationsAreEqual(a, b) { |
|
1373
|
|
|
return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state); |
|
1374
|
|
|
} |
|
1375
|
|
|
|
|
1376
|
|
|
function createTransitionManager() { |
|
1377
|
|
|
var prompt = null; |
|
1378
|
|
|
|
|
1379
|
|
|
function setPrompt(nextPrompt) { |
|
1380
|
|
|
warning(prompt == null, 'A history supports only one prompt at a time') ; |
|
1381
|
|
|
prompt = nextPrompt; |
|
1382
|
|
|
return function () { |
|
1383
|
|
|
if (prompt === nextPrompt) prompt = null; |
|
1384
|
|
|
}; |
|
1385
|
|
|
} |
|
1386
|
|
|
|
|
1387
|
|
|
function confirmTransitionTo(location, action, getUserConfirmation, callback) { |
|
1388
|
|
|
// TODO: If another transition starts while we're still confirming |
|
1389
|
|
|
// the previous one, we may end up in a weird state. Figure out the |
|
1390
|
|
|
// best way to handle this. |
|
1391
|
|
|
if (prompt != null) { |
|
1392
|
|
|
var result = typeof prompt === 'function' ? prompt(location, action) : prompt; |
|
1393
|
|
|
|
|
1394
|
|
|
if (typeof result === 'string') { |
|
1395
|
|
|
if (typeof getUserConfirmation === 'function') { |
|
1396
|
|
|
getUserConfirmation(result, callback); |
|
1397
|
|
|
} else { |
|
1398
|
|
|
warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') ; |
|
1399
|
|
|
callback(true); |
|
1400
|
|
|
} |
|
1401
|
|
|
} else { |
|
1402
|
|
|
// Return false from a transition hook to cancel the transition. |
|
1403
|
|
|
callback(result !== false); |
|
1404
|
|
|
} |
|
1405
|
|
|
} else { |
|
1406
|
|
|
callback(true); |
|
1407
|
|
|
} |
|
1408
|
|
|
} |
|
1409
|
|
|
|
|
1410
|
|
|
var listeners = []; |
|
1411
|
|
|
|
|
1412
|
|
|
function appendListener(fn) { |
|
1413
|
|
|
var isActive = true; |
|
1414
|
|
|
|
|
1415
|
|
|
function listener() { |
|
1416
|
|
|
if (isActive) fn.apply(void 0, arguments); |
|
1417
|
|
|
} |
|
1418
|
|
|
|
|
1419
|
|
|
listeners.push(listener); |
|
1420
|
|
|
return function () { |
|
1421
|
|
|
isActive = false; |
|
1422
|
|
|
listeners = listeners.filter(function (item) { |
|
1423
|
|
|
return item !== listener; |
|
1424
|
|
|
}); |
|
1425
|
|
|
}; |
|
1426
|
|
|
} |
|
1427
|
|
|
|
|
1428
|
|
|
function notifyListeners() { |
|
1429
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { |
|
1430
|
|
|
args[_key] = arguments[_key]; |
|
1431
|
|
|
} |
|
1432
|
|
|
|
|
1433
|
|
|
listeners.forEach(function (listener) { |
|
1434
|
|
|
return listener.apply(void 0, args); |
|
1435
|
|
|
}); |
|
1436
|
|
|
} |
|
1437
|
|
|
|
|
1438
|
|
|
return { |
|
1439
|
|
|
setPrompt: setPrompt, |
|
1440
|
|
|
confirmTransitionTo: confirmTransitionTo, |
|
1441
|
|
|
appendListener: appendListener, |
|
1442
|
|
|
notifyListeners: notifyListeners |
|
1443
|
|
|
}; |
|
1444
|
|
|
} |
|
1445
|
|
|
|
|
1446
|
|
|
var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); |
|
1447
|
|
|
function getConfirmation(message, callback) { |
|
1448
|
|
|
callback(window.confirm(message)); // eslint-disable-line no-alert |
|
1449
|
|
|
} |
|
1450
|
|
|
/** |
|
1451
|
|
|
* Returns true if the HTML5 history API is supported. Taken from Modernizr. |
|
1452
|
|
|
* |
|
1453
|
|
|
* https://github.com/Modernizr/Modernizr/blob/master/LICENSE |
|
1454
|
|
|
* https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js |
|
1455
|
|
|
* changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586 |
|
1456
|
|
|
*/ |
|
1457
|
|
|
|
|
1458
|
|
|
function supportsHistory() { |
|
1459
|
|
|
var ua = window.navigator.userAgent; |
|
1460
|
|
|
if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false; |
|
1461
|
|
|
return window.history && 'pushState' in window.history; |
|
1462
|
|
|
} |
|
1463
|
|
|
/** |
|
1464
|
|
|
* Returns true if browser fires popstate on hash change. |
|
1465
|
|
|
* IE10 and IE11 do not. |
|
1466
|
|
|
*/ |
|
1467
|
|
|
|
|
1468
|
|
|
function supportsPopStateOnHashChange() { |
|
1469
|
|
|
return window.navigator.userAgent.indexOf('Trident') === -1; |
|
1470
|
|
|
} |
|
1471
|
|
|
/** |
|
1472
|
|
|
* Returns false if using go(n) with hash history causes a full page reload. |
|
1473
|
|
|
*/ |
|
1474
|
|
|
|
|
1475
|
|
|
function supportsGoWithoutReloadUsingHash() { |
|
1476
|
|
|
return window.navigator.userAgent.indexOf('Firefox') === -1; |
|
1477
|
|
|
} |
|
1478
|
|
|
/** |
|
1479
|
|
|
* Returns true if a given popstate event is an extraneous WebKit event. |
|
1480
|
|
|
* Accounts for the fact that Chrome on iOS fires real popstate events |
|
1481
|
|
|
* containing undefined state when pressing the back button. |
|
1482
|
|
|
*/ |
|
1483
|
|
|
|
|
1484
|
|
|
function isExtraneousPopstateEvent(event) { |
|
1485
|
|
|
event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1; |
|
1486
|
|
|
} |
|
1487
|
|
|
|
|
1488
|
|
|
var PopStateEvent = 'popstate'; |
|
1489
|
|
|
var HashChangeEvent = 'hashchange'; |
|
1490
|
|
|
|
|
1491
|
|
|
function getHistoryState() { |
|
1492
|
|
|
try { |
|
1493
|
|
|
return window.history.state || {}; |
|
1494
|
|
|
} catch (e) { |
|
1495
|
|
|
// IE 11 sometimes throws when accessing window.history.state |
|
1496
|
|
|
// See https://github.com/ReactTraining/history/pull/289 |
|
1497
|
|
|
return {}; |
|
1498
|
|
|
} |
|
1499
|
|
|
} |
|
1500
|
|
|
/** |
|
1501
|
|
|
* Creates a history object that uses the HTML5 history API including |
|
1502
|
|
|
* pushState, replaceState, and the popstate event. |
|
1503
|
|
|
*/ |
|
1504
|
|
|
|
|
1505
|
|
|
|
|
1506
|
|
|
function createBrowserHistory(props) { |
|
1507
|
|
|
if (props === void 0) { |
|
1508
|
|
|
props = {}; |
|
1509
|
|
|
} |
|
1510
|
|
|
|
|
1511
|
|
|
!canUseDOM ? invariant(false, 'Browser history needs a DOM') : void 0; |
|
1512
|
|
|
var globalHistory = window.history; |
|
1513
|
|
|
var canUseHistory = supportsHistory(); |
|
1514
|
|
|
var needsHashChangeListener = !supportsPopStateOnHashChange(); |
|
1515
|
|
|
var _props = props, |
|
1516
|
|
|
_props$forceRefresh = _props.forceRefresh, |
|
1517
|
|
|
forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh, |
|
1518
|
|
|
_props$getUserConfirm = _props.getUserConfirmation, |
|
1519
|
|
|
getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm, |
|
1520
|
|
|
_props$keyLength = _props.keyLength, |
|
1521
|
|
|
keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength; |
|
1522
|
|
|
var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : ''; |
|
1523
|
|
|
|
|
1524
|
|
|
function getDOMLocation(historyState) { |
|
1525
|
|
|
var _ref = historyState || {}, |
|
1526
|
|
|
key = _ref.key, |
|
1527
|
|
|
state = _ref.state; |
|
1528
|
|
|
|
|
1529
|
|
|
var _window$location = window.location, |
|
1530
|
|
|
pathname = _window$location.pathname, |
|
1531
|
|
|
search = _window$location.search, |
|
1532
|
|
|
hash = _window$location.hash; |
|
1533
|
|
|
var path = pathname + search + hash; |
|
1534
|
|
|
warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path "' + path + '" to begin with "' + basename + '".') ; |
|
1535
|
|
|
if (basename) path = stripBasename(path, basename); |
|
1536
|
|
|
return createLocation(path, state, key); |
|
1537
|
|
|
} |
|
1538
|
|
|
|
|
1539
|
|
|
function createKey() { |
|
1540
|
|
|
return Math.random().toString(36).substr(2, keyLength); |
|
1541
|
|
|
} |
|
1542
|
|
|
|
|
1543
|
|
|
var transitionManager = createTransitionManager(); |
|
1544
|
|
|
|
|
1545
|
|
|
function setState(nextState) { |
|
1546
|
|
|
_extends(history, nextState); |
|
1547
|
|
|
|
|
1548
|
|
|
history.length = globalHistory.length; |
|
1549
|
|
|
transitionManager.notifyListeners(history.location, history.action); |
|
1550
|
|
|
} |
|
1551
|
|
|
|
|
1552
|
|
|
function handlePopState(event) { |
|
1553
|
|
|
// Ignore extraneous popstate events in WebKit. |
|
1554
|
|
|
if (isExtraneousPopstateEvent(event)) return; |
|
1555
|
|
|
handlePop(getDOMLocation(event.state)); |
|
1556
|
|
|
} |
|
1557
|
|
|
|
|
1558
|
|
|
function handleHashChange() { |
|
1559
|
|
|
handlePop(getDOMLocation(getHistoryState())); |
|
1560
|
|
|
} |
|
1561
|
|
|
|
|
1562
|
|
|
var forceNextPop = false; |
|
1563
|
|
|
|
|
1564
|
|
|
function handlePop(location) { |
|
1565
|
|
|
if (forceNextPop) { |
|
1566
|
|
|
forceNextPop = false; |
|
1567
|
|
|
setState(); |
|
1568
|
|
|
} else { |
|
1569
|
|
|
var action = 'POP'; |
|
1570
|
|
|
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { |
|
1571
|
|
|
if (ok) { |
|
1572
|
|
|
setState({ |
|
1573
|
|
|
action: action, |
|
1574
|
|
|
location: location |
|
1575
|
|
|
}); |
|
1576
|
|
|
} else { |
|
1577
|
|
|
revertPop(location); |
|
1578
|
|
|
} |
|
1579
|
|
|
}); |
|
1580
|
|
|
} |
|
1581
|
|
|
} |
|
1582
|
|
|
|
|
1583
|
|
|
function revertPop(fromLocation) { |
|
1584
|
|
|
var toLocation = history.location; // TODO: We could probably make this more reliable by |
|
1585
|
|
|
// keeping a list of keys we've seen in sessionStorage. |
|
1586
|
|
|
// Instead, we just default to 0 for keys we don't know. |
|
1587
|
|
|
|
|
1588
|
|
|
var toIndex = allKeys.indexOf(toLocation.key); |
|
1589
|
|
|
if (toIndex === -1) toIndex = 0; |
|
1590
|
|
|
var fromIndex = allKeys.indexOf(fromLocation.key); |
|
1591
|
|
|
if (fromIndex === -1) fromIndex = 0; |
|
1592
|
|
|
var delta = toIndex - fromIndex; |
|
1593
|
|
|
|
|
1594
|
|
|
if (delta) { |
|
1595
|
|
|
forceNextPop = true; |
|
1596
|
|
|
go(delta); |
|
1597
|
|
|
} |
|
1598
|
|
|
} |
|
1599
|
|
|
|
|
1600
|
|
|
var initialLocation = getDOMLocation(getHistoryState()); |
|
1601
|
|
|
var allKeys = [initialLocation.key]; // Public interface |
|
1602
|
|
|
|
|
1603
|
|
|
function createHref(location) { |
|
1604
|
|
|
return basename + createPath(location); |
|
1605
|
|
|
} |
|
1606
|
|
|
|
|
1607
|
|
|
function push(path, state) { |
|
1608
|
|
|
warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') ; |
|
1609
|
|
|
var action = 'PUSH'; |
|
1610
|
|
|
var location = createLocation(path, state, createKey(), history.location); |
|
1611
|
|
|
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { |
|
1612
|
|
|
if (!ok) return; |
|
1613
|
|
|
var href = createHref(location); |
|
1614
|
|
|
var key = location.key, |
|
1615
|
|
|
state = location.state; |
|
1616
|
|
|
|
|
1617
|
|
|
if (canUseHistory) { |
|
1618
|
|
|
globalHistory.pushState({ |
|
1619
|
|
|
key: key, |
|
1620
|
|
|
state: state |
|
1621
|
|
|
}, null, href); |
|
1622
|
|
|
|
|
1623
|
|
|
if (forceRefresh) { |
|
1624
|
|
|
window.location.href = href; |
|
1625
|
|
|
} else { |
|
1626
|
|
|
var prevIndex = allKeys.indexOf(history.location.key); |
|
1627
|
|
|
var nextKeys = allKeys.slice(0, prevIndex === -1 ? 0 : prevIndex + 1); |
|
1628
|
|
|
nextKeys.push(location.key); |
|
1629
|
|
|
allKeys = nextKeys; |
|
1630
|
|
|
setState({ |
|
1631
|
|
|
action: action, |
|
1632
|
|
|
location: location |
|
1633
|
|
|
}); |
|
1634
|
|
|
} |
|
1635
|
|
|
} else { |
|
1636
|
|
|
warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') ; |
|
1637
|
|
|
window.location.href = href; |
|
1638
|
|
|
} |
|
1639
|
|
|
}); |
|
1640
|
|
|
} |
|
1641
|
|
|
|
|
1642
|
|
|
function replace(path, state) { |
|
1643
|
|
|
warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') ; |
|
1644
|
|
|
var action = 'REPLACE'; |
|
1645
|
|
|
var location = createLocation(path, state, createKey(), history.location); |
|
1646
|
|
|
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { |
|
1647
|
|
|
if (!ok) return; |
|
1648
|
|
|
var href = createHref(location); |
|
1649
|
|
|
var key = location.key, |
|
1650
|
|
|
state = location.state; |
|
1651
|
|
|
|
|
1652
|
|
|
if (canUseHistory) { |
|
1653
|
|
|
globalHistory.replaceState({ |
|
1654
|
|
|
key: key, |
|
1655
|
|
|
state: state |
|
1656
|
|
|
}, null, href); |
|
1657
|
|
|
|
|
1658
|
|
|
if (forceRefresh) { |
|
1659
|
|
|
window.location.replace(href); |
|
1660
|
|
|
} else { |
|
1661
|
|
|
var prevIndex = allKeys.indexOf(history.location.key); |
|
1662
|
|
|
if (prevIndex !== -1) allKeys[prevIndex] = location.key; |
|
1663
|
|
|
setState({ |
|
1664
|
|
|
action: action, |
|
1665
|
|
|
location: location |
|
1666
|
|
|
}); |
|
1667
|
|
|
} |
|
1668
|
|
|
} else { |
|
1669
|
|
|
warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') ; |
|
1670
|
|
|
window.location.replace(href); |
|
1671
|
|
|
} |
|
1672
|
|
|
}); |
|
1673
|
|
|
} |
|
1674
|
|
|
|
|
1675
|
|
|
function go(n) { |
|
1676
|
|
|
globalHistory.go(n); |
|
1677
|
|
|
} |
|
1678
|
|
|
|
|
1679
|
|
|
function goBack() { |
|
1680
|
|
|
go(-1); |
|
1681
|
|
|
} |
|
1682
|
|
|
|
|
1683
|
|
|
function goForward() { |
|
1684
|
|
|
go(1); |
|
1685
|
|
|
} |
|
1686
|
|
|
|
|
1687
|
|
|
var listenerCount = 0; |
|
1688
|
|
|
|
|
1689
|
|
|
function checkDOMListeners(delta) { |
|
1690
|
|
|
listenerCount += delta; |
|
1691
|
|
|
|
|
1692
|
|
|
if (listenerCount === 1 && delta === 1) { |
|
1693
|
|
|
window.addEventListener(PopStateEvent, handlePopState); |
|
1694
|
|
|
if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange); |
|
1695
|
|
|
} else if (listenerCount === 0) { |
|
1696
|
|
|
window.removeEventListener(PopStateEvent, handlePopState); |
|
1697
|
|
|
if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange); |
|
1698
|
|
|
} |
|
1699
|
|
|
} |
|
1700
|
|
|
|
|
1701
|
|
|
var isBlocked = false; |
|
1702
|
|
|
|
|
1703
|
|
|
function block(prompt) { |
|
1704
|
|
|
if (prompt === void 0) { |
|
1705
|
|
|
prompt = false; |
|
1706
|
|
|
} |
|
1707
|
|
|
|
|
1708
|
|
|
var unblock = transitionManager.setPrompt(prompt); |
|
1709
|
|
|
|
|
1710
|
|
|
if (!isBlocked) { |
|
1711
|
|
|
checkDOMListeners(1); |
|
1712
|
|
|
isBlocked = true; |
|
1713
|
|
|
} |
|
1714
|
|
|
|
|
1715
|
|
|
return function () { |
|
1716
|
|
|
if (isBlocked) { |
|
1717
|
|
|
isBlocked = false; |
|
1718
|
|
|
checkDOMListeners(-1); |
|
1719
|
|
|
} |
|
1720
|
|
|
|
|
1721
|
|
|
return unblock(); |
|
1722
|
|
|
}; |
|
1723
|
|
|
} |
|
1724
|
|
|
|
|
1725
|
|
|
function listen(listener) { |
|
1726
|
|
|
var unlisten = transitionManager.appendListener(listener); |
|
1727
|
|
|
checkDOMListeners(1); |
|
1728
|
|
|
return function () { |
|
1729
|
|
|
checkDOMListeners(-1); |
|
1730
|
|
|
unlisten(); |
|
1731
|
|
|
}; |
|
1732
|
|
|
} |
|
1733
|
|
|
|
|
1734
|
|
|
var history = { |
|
1735
|
|
|
length: globalHistory.length, |
|
1736
|
|
|
action: 'POP', |
|
1737
|
|
|
location: initialLocation, |
|
1738
|
|
|
createHref: createHref, |
|
1739
|
|
|
push: push, |
|
1740
|
|
|
replace: replace, |
|
1741
|
|
|
go: go, |
|
1742
|
|
|
goBack: goBack, |
|
1743
|
|
|
goForward: goForward, |
|
1744
|
|
|
block: block, |
|
1745
|
|
|
listen: listen |
|
1746
|
|
|
}; |
|
1747
|
|
|
return history; |
|
1748
|
|
|
} |
|
1749
|
|
|
|
|
1750
|
|
|
var HashChangeEvent$1 = 'hashchange'; |
|
1751
|
|
|
var HashPathCoders = { |
|
1752
|
|
|
hashbang: { |
|
1753
|
|
|
encodePath: function encodePath(path) { |
|
1754
|
|
|
return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path); |
|
1755
|
|
|
}, |
|
1756
|
|
|
decodePath: function decodePath(path) { |
|
1757
|
|
|
return path.charAt(0) === '!' ? path.substr(1) : path; |
|
1758
|
|
|
} |
|
1759
|
|
|
}, |
|
1760
|
|
|
noslash: { |
|
1761
|
|
|
encodePath: stripLeadingSlash, |
|
1762
|
|
|
decodePath: addLeadingSlash |
|
1763
|
|
|
}, |
|
1764
|
|
|
slash: { |
|
1765
|
|
|
encodePath: addLeadingSlash, |
|
1766
|
|
|
decodePath: addLeadingSlash |
|
1767
|
|
|
} |
|
1768
|
|
|
}; |
|
1769
|
|
|
|
|
1770
|
|
|
function getHashPath() { |
|
1771
|
|
|
// We can't use window.location.hash here because it's not |
|
1772
|
|
|
// consistent across browsers - Firefox will pre-decode it! |
|
1773
|
|
|
var href = window.location.href; |
|
1774
|
|
|
var hashIndex = href.indexOf('#'); |
|
1775
|
|
|
return hashIndex === -1 ? '' : href.substring(hashIndex + 1); |
|
1776
|
|
|
} |
|
1777
|
|
|
|
|
1778
|
|
|
function pushHashPath(path) { |
|
1779
|
|
|
window.location.hash = path; |
|
1780
|
|
|
} |
|
1781
|
|
|
|
|
1782
|
|
|
function replaceHashPath(path) { |
|
1783
|
|
|
var hashIndex = window.location.href.indexOf('#'); |
|
1784
|
|
|
window.location.replace(window.location.href.slice(0, hashIndex >= 0 ? hashIndex : 0) + '#' + path); |
|
1785
|
|
|
} |
|
1786
|
|
|
|
|
1787
|
|
|
function createHashHistory(props) { |
|
1788
|
|
|
if (props === void 0) { |
|
1789
|
|
|
props = {}; |
|
1790
|
|
|
} |
|
1791
|
|
|
|
|
1792
|
|
|
!canUseDOM ? invariant(false, 'Hash history needs a DOM') : void 0; |
|
1793
|
|
|
var globalHistory = window.history; |
|
1794
|
|
|
var canGoWithoutReload = supportsGoWithoutReloadUsingHash(); |
|
1795
|
|
|
var _props = props, |
|
1796
|
|
|
_props$getUserConfirm = _props.getUserConfirmation, |
|
1797
|
|
|
getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm, |
|
1798
|
|
|
_props$hashType = _props.hashType, |
|
1799
|
|
|
hashType = _props$hashType === void 0 ? 'slash' : _props$hashType; |
|
1800
|
|
|
var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : ''; |
|
1801
|
|
|
var _HashPathCoders$hashT = HashPathCoders[hashType], |
|
1802
|
|
|
encodePath = _HashPathCoders$hashT.encodePath, |
|
1803
|
|
|
decodePath = _HashPathCoders$hashT.decodePath; |
|
1804
|
|
|
|
|
1805
|
|
|
function getDOMLocation() { |
|
1806
|
|
|
var path = decodePath(getHashPath()); |
|
1807
|
|
|
warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path "' + path + '" to begin with "' + basename + '".') ; |
|
1808
|
|
|
if (basename) path = stripBasename(path, basename); |
|
1809
|
|
|
return createLocation(path); |
|
1810
|
|
|
} |
|
1811
|
|
|
|
|
1812
|
|
|
var transitionManager = createTransitionManager(); |
|
1813
|
|
|
|
|
1814
|
|
|
function setState(nextState) { |
|
1815
|
|
|
_extends(history, nextState); |
|
1816
|
|
|
|
|
1817
|
|
|
history.length = globalHistory.length; |
|
1818
|
|
|
transitionManager.notifyListeners(history.location, history.action); |
|
1819
|
|
|
} |
|
1820
|
|
|
|
|
1821
|
|
|
var forceNextPop = false; |
|
1822
|
|
|
var ignorePath = null; |
|
1823
|
|
|
|
|
1824
|
|
|
function handleHashChange() { |
|
1825
|
|
|
var path = getHashPath(); |
|
1826
|
|
|
var encodedPath = encodePath(path); |
|
1827
|
|
|
|
|
1828
|
|
|
if (path !== encodedPath) { |
|
1829
|
|
|
// Ensure we always have a properly-encoded hash. |
|
1830
|
|
|
replaceHashPath(encodedPath); |
|
1831
|
|
|
} else { |
|
1832
|
|
|
var location = getDOMLocation(); |
|
1833
|
|
|
var prevLocation = history.location; |
|
1834
|
|
|
if (!forceNextPop && locationsAreEqual(prevLocation, location)) return; // A hashchange doesn't always == location change. |
|
1835
|
|
|
|
|
1836
|
|
|
if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace. |
|
1837
|
|
|
|
|
1838
|
|
|
ignorePath = null; |
|
1839
|
|
|
handlePop(location); |
|
1840
|
|
|
} |
|
1841
|
|
|
} |
|
1842
|
|
|
|
|
1843
|
|
|
function handlePop(location) { |
|
1844
|
|
|
if (forceNextPop) { |
|
1845
|
|
|
forceNextPop = false; |
|
1846
|
|
|
setState(); |
|
1847
|
|
|
} else { |
|
1848
|
|
|
var action = 'POP'; |
|
1849
|
|
|
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { |
|
1850
|
|
|
if (ok) { |
|
1851
|
|
|
setState({ |
|
1852
|
|
|
action: action, |
|
1853
|
|
|
location: location |
|
1854
|
|
|
}); |
|
1855
|
|
|
} else { |
|
1856
|
|
|
revertPop(location); |
|
1857
|
|
|
} |
|
1858
|
|
|
}); |
|
1859
|
|
|
} |
|
1860
|
|
|
} |
|
1861
|
|
|
|
|
1862
|
|
|
function revertPop(fromLocation) { |
|
1863
|
|
|
var toLocation = history.location; // TODO: We could probably make this more reliable by |
|
1864
|
|
|
// keeping a list of paths we've seen in sessionStorage. |
|
1865
|
|
|
// Instead, we just default to 0 for paths we don't know. |
|
1866
|
|
|
|
|
1867
|
|
|
var toIndex = allPaths.lastIndexOf(createPath(toLocation)); |
|
1868
|
|
|
if (toIndex === -1) toIndex = 0; |
|
1869
|
|
|
var fromIndex = allPaths.lastIndexOf(createPath(fromLocation)); |
|
1870
|
|
|
if (fromIndex === -1) fromIndex = 0; |
|
1871
|
|
|
var delta = toIndex - fromIndex; |
|
1872
|
|
|
|
|
1873
|
|
|
if (delta) { |
|
1874
|
|
|
forceNextPop = true; |
|
1875
|
|
|
go(delta); |
|
1876
|
|
|
} |
|
1877
|
|
|
} // Ensure the hash is encoded properly before doing anything else. |
|
1878
|
|
|
|
|
1879
|
|
|
|
|
1880
|
|
|
var path = getHashPath(); |
|
1881
|
|
|
var encodedPath = encodePath(path); |
|
1882
|
|
|
if (path !== encodedPath) replaceHashPath(encodedPath); |
|
1883
|
|
|
var initialLocation = getDOMLocation(); |
|
1884
|
|
|
var allPaths = [createPath(initialLocation)]; // Public interface |
|
1885
|
|
|
|
|
1886
|
|
|
function createHref(location) { |
|
1887
|
|
|
return '#' + encodePath(basename + createPath(location)); |
|
1888
|
|
|
} |
|
1889
|
|
|
|
|
1890
|
|
|
function push(path, state) { |
|
1891
|
|
|
warning(state === undefined, 'Hash history cannot push state; it is ignored') ; |
|
1892
|
|
|
var action = 'PUSH'; |
|
1893
|
|
|
var location = createLocation(path, undefined, undefined, history.location); |
|
1894
|
|
|
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { |
|
1895
|
|
|
if (!ok) return; |
|
1896
|
|
|
var path = createPath(location); |
|
1897
|
|
|
var encodedPath = encodePath(basename + path); |
|
1898
|
|
|
var hashChanged = getHashPath() !== encodedPath; |
|
1899
|
|
|
|
|
1900
|
|
|
if (hashChanged) { |
|
1901
|
|
|
// We cannot tell if a hashchange was caused by a PUSH, so we'd |
|
1902
|
|
|
// rather setState here and ignore the hashchange. The caveat here |
|
1903
|
|
|
// is that other hash histories in the page will consider it a POP. |
|
1904
|
|
|
ignorePath = path; |
|
1905
|
|
|
pushHashPath(encodedPath); |
|
1906
|
|
|
var prevIndex = allPaths.lastIndexOf(createPath(history.location)); |
|
1907
|
|
|
var nextPaths = allPaths.slice(0, prevIndex === -1 ? 0 : prevIndex + 1); |
|
1908
|
|
|
nextPaths.push(path); |
|
1909
|
|
|
allPaths = nextPaths; |
|
1910
|
|
|
setState({ |
|
1911
|
|
|
action: action, |
|
1912
|
|
|
location: location |
|
1913
|
|
|
}); |
|
1914
|
|
|
} else { |
|
1915
|
|
|
warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') ; |
|
1916
|
|
|
setState(); |
|
1917
|
|
|
} |
|
1918
|
|
|
}); |
|
1919
|
|
|
} |
|
1920
|
|
|
|
|
1921
|
|
|
function replace(path, state) { |
|
1922
|
|
|
warning(state === undefined, 'Hash history cannot replace state; it is ignored') ; |
|
1923
|
|
|
var action = 'REPLACE'; |
|
1924
|
|
|
var location = createLocation(path, undefined, undefined, history.location); |
|
1925
|
|
|
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { |
|
1926
|
|
|
if (!ok) return; |
|
1927
|
|
|
var path = createPath(location); |
|
1928
|
|
|
var encodedPath = encodePath(basename + path); |
|
1929
|
|
|
var hashChanged = getHashPath() !== encodedPath; |
|
1930
|
|
|
|
|
1931
|
|
|
if (hashChanged) { |
|
1932
|
|
|
// We cannot tell if a hashchange was caused by a REPLACE, so we'd |
|
1933
|
|
|
// rather setState here and ignore the hashchange. The caveat here |
|
1934
|
|
|
// is that other hash histories in the page will consider it a POP. |
|
1935
|
|
|
ignorePath = path; |
|
1936
|
|
|
replaceHashPath(encodedPath); |
|
1937
|
|
|
} |
|
1938
|
|
|
|
|
1939
|
|
|
var prevIndex = allPaths.indexOf(createPath(history.location)); |
|
1940
|
|
|
if (prevIndex !== -1) allPaths[prevIndex] = path; |
|
1941
|
|
|
setState({ |
|
1942
|
|
|
action: action, |
|
1943
|
|
|
location: location |
|
1944
|
|
|
}); |
|
1945
|
|
|
}); |
|
1946
|
|
|
} |
|
1947
|
|
|
|
|
1948
|
|
|
function go(n) { |
|
1949
|
|
|
warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') ; |
|
1950
|
|
|
globalHistory.go(n); |
|
1951
|
|
|
} |
|
1952
|
|
|
|
|
1953
|
|
|
function goBack() { |
|
1954
|
|
|
go(-1); |
|
1955
|
|
|
} |
|
1956
|
|
|
|
|
1957
|
|
|
function goForward() { |
|
1958
|
|
|
go(1); |
|
1959
|
|
|
} |
|
1960
|
|
|
|
|
1961
|
|
|
var listenerCount = 0; |
|
1962
|
|
|
|
|
1963
|
|
|
function checkDOMListeners(delta) { |
|
1964
|
|
|
listenerCount += delta; |
|
1965
|
|
|
|
|
1966
|
|
|
if (listenerCount === 1 && delta === 1) { |
|
1967
|
|
|
window.addEventListener(HashChangeEvent$1, handleHashChange); |
|
1968
|
|
|
} else if (listenerCount === 0) { |
|
1969
|
|
|
window.removeEventListener(HashChangeEvent$1, handleHashChange); |
|
1970
|
|
|
} |
|
1971
|
|
|
} |
|
1972
|
|
|
|
|
1973
|
|
|
var isBlocked = false; |
|
1974
|
|
|
|
|
1975
|
|
|
function block(prompt) { |
|
1976
|
|
|
if (prompt === void 0) { |
|
1977
|
|
|
prompt = false; |
|
1978
|
|
|
} |
|
1979
|
|
|
|
|
1980
|
|
|
var unblock = transitionManager.setPrompt(prompt); |
|
1981
|
|
|
|
|
1982
|
|
|
if (!isBlocked) { |
|
1983
|
|
|
checkDOMListeners(1); |
|
1984
|
|
|
isBlocked = true; |
|
1985
|
|
|
} |
|
1986
|
|
|
|
|
1987
|
|
|
return function () { |
|
1988
|
|
|
if (isBlocked) { |
|
1989
|
|
|
isBlocked = false; |
|
1990
|
|
|
checkDOMListeners(-1); |
|
1991
|
|
|
} |
|
1992
|
|
|
|
|
1993
|
|
|
return unblock(); |
|
1994
|
|
|
}; |
|
1995
|
|
|
} |
|
1996
|
|
|
|
|
1997
|
|
|
function listen(listener) { |
|
1998
|
|
|
var unlisten = transitionManager.appendListener(listener); |
|
1999
|
|
|
checkDOMListeners(1); |
|
2000
|
|
|
return function () { |
|
2001
|
|
|
checkDOMListeners(-1); |
|
2002
|
|
|
unlisten(); |
|
2003
|
|
|
}; |
|
2004
|
|
|
} |
|
2005
|
|
|
|
|
2006
|
|
|
var history = { |
|
2007
|
|
|
length: globalHistory.length, |
|
2008
|
|
|
action: 'POP', |
|
2009
|
|
|
location: initialLocation, |
|
2010
|
|
|
createHref: createHref, |
|
2011
|
|
|
push: push, |
|
2012
|
|
|
replace: replace, |
|
2013
|
|
|
go: go, |
|
2014
|
|
|
goBack: goBack, |
|
2015
|
|
|
goForward: goForward, |
|
2016
|
|
|
block: block, |
|
2017
|
|
|
listen: listen |
|
2018
|
|
|
}; |
|
2019
|
|
|
return history; |
|
2020
|
|
|
} |
|
2021
|
|
|
|
|
2022
|
|
|
function clamp(n, lowerBound, upperBound) { |
|
2023
|
|
|
return Math.min(Math.max(n, lowerBound), upperBound); |
|
2024
|
|
|
} |
|
2025
|
|
|
/** |
|
2026
|
|
|
* Creates a history object that stores locations in memory. |
|
2027
|
|
|
*/ |
|
2028
|
|
|
|
|
2029
|
|
|
|
|
2030
|
|
|
function createMemoryHistory(props) { |
|
2031
|
|
|
if (props === void 0) { |
|
2032
|
|
|
props = {}; |
|
2033
|
|
|
} |
|
2034
|
|
|
|
|
2035
|
|
|
var _props = props, |
|
2036
|
|
|
getUserConfirmation = _props.getUserConfirmation, |
|
2037
|
|
|
_props$initialEntries = _props.initialEntries, |
|
2038
|
|
|
initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries, |
|
2039
|
|
|
_props$initialIndex = _props.initialIndex, |
|
2040
|
|
|
initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex, |
|
2041
|
|
|
_props$keyLength = _props.keyLength, |
|
2042
|
|
|
keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength; |
|
2043
|
|
|
var transitionManager = createTransitionManager(); |
|
2044
|
|
|
|
|
2045
|
|
|
function setState(nextState) { |
|
2046
|
|
|
_extends(history, nextState); |
|
2047
|
|
|
|
|
2048
|
|
|
history.length = history.entries.length; |
|
2049
|
|
|
transitionManager.notifyListeners(history.location, history.action); |
|
2050
|
|
|
} |
|
2051
|
|
|
|
|
2052
|
|
|
function createKey() { |
|
2053
|
|
|
return Math.random().toString(36).substr(2, keyLength); |
|
2054
|
|
|
} |
|
2055
|
|
|
|
|
2056
|
|
|
var index = clamp(initialIndex, 0, initialEntries.length - 1); |
|
2057
|
|
|
var entries = initialEntries.map(function (entry) { |
|
2058
|
|
|
return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey()); |
|
2059
|
|
|
}); // Public interface |
|
2060
|
|
|
|
|
2061
|
|
|
var createHref = createPath; |
|
2062
|
|
|
|
|
2063
|
|
|
function push(path, state) { |
|
2064
|
|
|
warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') ; |
|
2065
|
|
|
var action = 'PUSH'; |
|
2066
|
|
|
var location = createLocation(path, state, createKey(), history.location); |
|
2067
|
|
|
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { |
|
2068
|
|
|
if (!ok) return; |
|
2069
|
|
|
var prevIndex = history.index; |
|
2070
|
|
|
var nextIndex = prevIndex + 1; |
|
2071
|
|
|
var nextEntries = history.entries.slice(0); |
|
2072
|
|
|
|
|
2073
|
|
|
if (nextEntries.length > nextIndex) { |
|
2074
|
|
|
nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location); |
|
2075
|
|
|
} else { |
|
2076
|
|
|
nextEntries.push(location); |
|
2077
|
|
|
} |
|
2078
|
|
|
|
|
2079
|
|
|
setState({ |
|
2080
|
|
|
action: action, |
|
2081
|
|
|
location: location, |
|
2082
|
|
|
index: nextIndex, |
|
2083
|
|
|
entries: nextEntries |
|
2084
|
|
|
}); |
|
2085
|
|
|
}); |
|
2086
|
|
|
} |
|
2087
|
|
|
|
|
2088
|
|
|
function replace(path, state) { |
|
2089
|
|
|
warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') ; |
|
2090
|
|
|
var action = 'REPLACE'; |
|
2091
|
|
|
var location = createLocation(path, state, createKey(), history.location); |
|
2092
|
|
|
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { |
|
2093
|
|
|
if (!ok) return; |
|
2094
|
|
|
history.entries[history.index] = location; |
|
2095
|
|
|
setState({ |
|
2096
|
|
|
action: action, |
|
2097
|
|
|
location: location |
|
2098
|
|
|
}); |
|
2099
|
|
|
}); |
|
2100
|
|
|
} |
|
2101
|
|
|
|
|
2102
|
|
|
function go(n) { |
|
2103
|
|
|
var nextIndex = clamp(history.index + n, 0, history.entries.length - 1); |
|
2104
|
|
|
var action = 'POP'; |
|
2105
|
|
|
var location = history.entries[nextIndex]; |
|
2106
|
|
|
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { |
|
2107
|
|
|
if (ok) { |
|
2108
|
|
|
setState({ |
|
2109
|
|
|
action: action, |
|
2110
|
|
|
location: location, |
|
2111
|
|
|
index: nextIndex |
|
2112
|
|
|
}); |
|
2113
|
|
|
} else { |
|
2114
|
|
|
// Mimic the behavior of DOM histories by |
|
2115
|
|
|
// causing a render after a cancelled POP. |
|
2116
|
|
|
setState(); |
|
2117
|
|
|
} |
|
2118
|
|
|
}); |
|
2119
|
|
|
} |
|
2120
|
|
|
|
|
2121
|
|
|
function goBack() { |
|
2122
|
|
|
go(-1); |
|
2123
|
|
|
} |
|
2124
|
|
|
|
|
2125
|
|
|
function goForward() { |
|
2126
|
|
|
go(1); |
|
2127
|
|
|
} |
|
2128
|
|
|
|
|
2129
|
|
|
function canGo(n) { |
|
2130
|
|
|
var nextIndex = history.index + n; |
|
2131
|
|
|
return nextIndex >= 0 && nextIndex < history.entries.length; |
|
2132
|
|
|
} |
|
2133
|
|
|
|
|
2134
|
|
|
function block(prompt) { |
|
2135
|
|
|
if (prompt === void 0) { |
|
2136
|
|
|
prompt = false; |
|
2137
|
|
|
} |
|
2138
|
|
|
|
|
2139
|
|
|
return transitionManager.setPrompt(prompt); |
|
2140
|
|
|
} |
|
2141
|
|
|
|
|
2142
|
|
|
function listen(listener) { |
|
2143
|
|
|
return transitionManager.appendListener(listener); |
|
2144
|
|
|
} |
|
2145
|
|
|
|
|
2146
|
|
|
var history = { |
|
2147
|
|
|
length: entries.length, |
|
2148
|
|
|
action: 'POP', |
|
2149
|
|
|
location: entries[index], |
|
2150
|
|
|
index: index, |
|
2151
|
|
|
entries: entries, |
|
2152
|
|
|
createHref: createHref, |
|
2153
|
|
|
push: push, |
|
2154
|
|
|
replace: replace, |
|
2155
|
|
|
go: go, |
|
2156
|
|
|
goBack: goBack, |
|
2157
|
|
|
goForward: goForward, |
|
2158
|
|
|
canGo: canGo, |
|
2159
|
|
|
block: block, |
|
2160
|
|
|
listen: listen |
|
2161
|
|
|
}; |
|
2162
|
|
|
return history; |
|
2163
|
|
|
} |
|
2164
|
|
|
|
|
2165
|
|
|
function _inheritsLoose$1(subClass, superClass) { |
|
2166
|
|
|
subClass.prototype = Object.create(superClass.prototype); |
|
2167
|
|
|
subClass.prototype.constructor = subClass; |
|
2168
|
|
|
subClass.__proto__ = superClass; |
|
2169
|
|
|
} |
|
2170
|
|
|
|
|
2171
|
|
|
var inheritsLoose = _inheritsLoose$1; |
|
2172
|
|
|
|
|
2173
|
|
|
var key = '__global_unique_id__'; |
|
2174
|
|
|
|
|
2175
|
|
|
var gud = function() { |
|
2176
|
|
|
return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1; |
|
2177
|
|
|
}; |
|
2178
|
|
|
|
|
2179
|
|
|
var MAX_SIGNED_31_BIT_INT = 1073741823; |
|
2180
|
|
|
|
|
2181
|
|
|
function objectIs(x, y) { |
|
2182
|
|
|
if (x === y) { |
|
2183
|
|
|
return x !== 0 || 1 / x === 1 / y; |
|
2184
|
|
|
} else { |
|
2185
|
|
|
return x !== x && y !== y; |
|
2186
|
|
|
} |
|
2187
|
|
|
} |
|
2188
|
|
|
|
|
2189
|
|
|
function createEventEmitter(value) { |
|
2190
|
|
|
var handlers = []; |
|
2191
|
|
|
return { |
|
2192
|
|
|
on: function on(handler) { |
|
2193
|
|
|
handlers.push(handler); |
|
2194
|
|
|
}, |
|
2195
|
|
|
off: function off(handler) { |
|
2196
|
|
|
handlers = handlers.filter(function (h) { |
|
2197
|
|
|
return h !== handler; |
|
2198
|
|
|
}); |
|
2199
|
|
|
}, |
|
2200
|
|
|
get: function get() { |
|
2201
|
|
|
return value; |
|
2202
|
|
|
}, |
|
2203
|
|
|
set: function set(newValue, changedBits) { |
|
2204
|
|
|
value = newValue; |
|
2205
|
|
|
handlers.forEach(function (handler) { |
|
2206
|
|
|
return handler(value, changedBits); |
|
2207
|
|
|
}); |
|
2208
|
|
|
} |
|
2209
|
|
|
}; |
|
2210
|
|
|
} |
|
2211
|
|
|
|
|
2212
|
|
|
function onlyChild(children) { |
|
2213
|
|
|
return Array.isArray(children) ? children[0] : children; |
|
2214
|
|
|
} |
|
2215
|
|
|
|
|
2216
|
|
|
function createReactContext(defaultValue, calculateChangedBits) { |
|
2217
|
|
|
var _Provider$childContex, _Consumer$contextType; |
|
2218
|
|
|
|
|
2219
|
|
|
var contextProp = '__create-react-context-' + gud() + '__'; |
|
2220
|
|
|
|
|
2221
|
|
|
var Provider = |
|
2222
|
|
|
/*#__PURE__*/ |
|
2223
|
|
|
function (_Component) { |
|
2224
|
|
|
inheritsLoose(Provider, _Component); |
|
2225
|
|
|
|
|
2226
|
|
|
function Provider() { |
|
2227
|
|
|
var _this; |
|
2228
|
|
|
|
|
2229
|
|
|
_this = _Component.apply(this, arguments) || this; |
|
2230
|
|
|
_this.emitter = createEventEmitter(_this.props.value); |
|
2231
|
|
|
return _this; |
|
2232
|
|
|
} |
|
2233
|
|
|
|
|
2234
|
|
|
var _proto = Provider.prototype; |
|
2235
|
|
|
|
|
2236
|
|
|
_proto.getChildContext = function getChildContext() { |
|
2237
|
|
|
var _ref; |
|
2238
|
|
|
|
|
2239
|
|
|
return _ref = {}, _ref[contextProp] = this.emitter, _ref; |
|
2240
|
|
|
}; |
|
2241
|
|
|
|
|
2242
|
|
|
_proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { |
|
2243
|
|
|
if (this.props.value !== nextProps.value) { |
|
2244
|
|
|
var oldValue = this.props.value; |
|
2245
|
|
|
var newValue = nextProps.value; |
|
2246
|
|
|
var changedBits; |
|
2247
|
|
|
|
|
2248
|
|
|
if (objectIs(oldValue, newValue)) { |
|
2249
|
|
|
changedBits = 0; |
|
2250
|
|
|
} else { |
|
2251
|
|
|
changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT; |
|
2252
|
|
|
|
|
2253
|
|
|
{ |
|
2254
|
|
|
warning((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits); |
|
2255
|
|
|
} |
|
2256
|
|
|
|
|
2257
|
|
|
changedBits |= 0; |
|
2258
|
|
|
|
|
2259
|
|
|
if (changedBits !== 0) { |
|
2260
|
|
|
this.emitter.set(nextProps.value, changedBits); |
|
2261
|
|
|
} |
|
2262
|
|
|
} |
|
2263
|
|
|
} |
|
2264
|
|
|
}; |
|
2265
|
|
|
|
|
2266
|
|
|
_proto.render = function render() { |
|
2267
|
|
|
return this.props.children; |
|
2268
|
|
|
}; |
|
2269
|
|
|
|
|
2270
|
|
|
return Provider; |
|
2271
|
|
|
}(React.Component); |
|
2272
|
|
|
|
|
2273
|
|
|
Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = propTypes.object.isRequired, _Provider$childContex); |
|
2274
|
|
|
|
|
2275
|
|
|
var Consumer = |
|
2276
|
|
|
/*#__PURE__*/ |
|
2277
|
|
|
function (_Component2) { |
|
2278
|
|
|
inheritsLoose(Consumer, _Component2); |
|
2279
|
|
|
|
|
2280
|
|
|
function Consumer() { |
|
2281
|
|
|
var _this2; |
|
2282
|
|
|
|
|
2283
|
|
|
_this2 = _Component2.apply(this, arguments) || this; |
|
2284
|
|
|
_this2.state = { |
|
2285
|
|
|
value: _this2.getValue() |
|
2286
|
|
|
}; |
|
2287
|
|
|
|
|
2288
|
|
|
_this2.onUpdate = function (newValue, changedBits) { |
|
2289
|
|
|
var observedBits = _this2.observedBits | 0; |
|
2290
|
|
|
|
|
2291
|
|
|
if ((observedBits & changedBits) !== 0) { |
|
2292
|
|
|
_this2.setState({ |
|
2293
|
|
|
value: _this2.getValue() |
|
2294
|
|
|
}); |
|
2295
|
|
|
} |
|
2296
|
|
|
}; |
|
2297
|
|
|
|
|
2298
|
|
|
return _this2; |
|
2299
|
|
|
} |
|
2300
|
|
|
|
|
2301
|
|
|
var _proto2 = Consumer.prototype; |
|
2302
|
|
|
|
|
2303
|
|
|
_proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { |
|
2304
|
|
|
var observedBits = nextProps.observedBits; |
|
2305
|
|
|
this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits; |
|
2306
|
|
|
}; |
|
2307
|
|
|
|
|
2308
|
|
|
_proto2.componentDidMount = function componentDidMount() { |
|
2309
|
|
|
if (this.context[contextProp]) { |
|
2310
|
|
|
this.context[contextProp].on(this.onUpdate); |
|
2311
|
|
|
} |
|
2312
|
|
|
|
|
2313
|
|
|
var observedBits = this.props.observedBits; |
|
2314
|
|
|
this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits; |
|
2315
|
|
|
}; |
|
2316
|
|
|
|
|
2317
|
|
|
_proto2.componentWillUnmount = function componentWillUnmount() { |
|
2318
|
|
|
if (this.context[contextProp]) { |
|
2319
|
|
|
this.context[contextProp].off(this.onUpdate); |
|
2320
|
|
|
} |
|
2321
|
|
|
}; |
|
2322
|
|
|
|
|
2323
|
|
|
_proto2.getValue = function getValue() { |
|
2324
|
|
|
if (this.context[contextProp]) { |
|
2325
|
|
|
return this.context[contextProp].get(); |
|
2326
|
|
|
} else { |
|
2327
|
|
|
return defaultValue; |
|
2328
|
|
|
} |
|
2329
|
|
|
}; |
|
2330
|
|
|
|
|
2331
|
|
|
_proto2.render = function render() { |
|
2332
|
|
|
return onlyChild(this.props.children)(this.state.value); |
|
2333
|
|
|
}; |
|
2334
|
|
|
|
|
2335
|
|
|
return Consumer; |
|
2336
|
|
|
}(React.Component); |
|
2337
|
|
|
|
|
2338
|
|
|
Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = propTypes.object, _Consumer$contextType); |
|
2339
|
|
|
return { |
|
2340
|
|
|
Provider: Provider, |
|
2341
|
|
|
Consumer: Consumer |
|
2342
|
|
|
}; |
|
2343
|
|
|
} |
|
2344
|
|
|
|
|
2345
|
|
|
var index = React__default.createContext || createReactContext; |
|
2346
|
|
|
|
|
2347
|
|
|
var isarray = Array.isArray || function (arr) { |
|
2348
|
|
|
return Object.prototype.toString.call(arr) == '[object Array]'; |
|
2349
|
|
|
}; |
|
2350
|
|
|
|
|
2351
|
|
|
/** |
|
2352
|
|
|
* Expose `pathToRegexp`. |
|
2353
|
|
|
*/ |
|
2354
|
|
|
var pathToRegexp_1 = pathToRegexp; |
|
2355
|
|
|
var parse_1 = parse; |
|
2356
|
|
|
var compile_1 = compile; |
|
2357
|
|
|
var tokensToFunction_1 = tokensToFunction; |
|
2358
|
|
|
var tokensToRegExp_1 = tokensToRegExp; |
|
2359
|
|
|
|
|
2360
|
|
|
/** |
|
2361
|
|
|
* The main path matching regexp utility. |
|
2362
|
|
|
* |
|
2363
|
|
|
* @type {RegExp} |
|
2364
|
|
|
*/ |
|
2365
|
|
|
var PATH_REGEXP = new RegExp([ |
|
2366
|
|
|
// Match escaped characters that would otherwise appear in future matches. |
|
2367
|
|
|
// This allows the user to escape special characters that won't transform. |
|
2368
|
|
|
'(\\\\.)', |
|
2369
|
|
|
// Match Express-style parameters and un-named parameters with a prefix |
|
2370
|
|
|
// and optional suffixes. Matches appear as: |
|
2371
|
|
|
// |
|
2372
|
|
|
// "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] |
|
2373
|
|
|
// "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] |
|
2374
|
|
|
// "/*" => ["/", undefined, undefined, undefined, undefined, "*"] |
|
2375
|
|
|
'([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' |
|
2376
|
|
|
].join('|'), 'g'); |
|
2377
|
|
|
|
|
2378
|
|
|
/** |
|
2379
|
|
|
* Parse a string for the raw tokens. |
|
2380
|
|
|
* |
|
2381
|
|
|
* @param {string} str |
|
2382
|
|
|
* @param {Object=} options |
|
2383
|
|
|
* @return {!Array} |
|
2384
|
|
|
*/ |
|
2385
|
|
|
function parse (str, options) { |
|
2386
|
|
|
var tokens = []; |
|
2387
|
|
|
var key = 0; |
|
2388
|
|
|
var index = 0; |
|
2389
|
|
|
var path = ''; |
|
2390
|
|
|
var defaultDelimiter = options && options.delimiter || '/'; |
|
2391
|
|
|
var res; |
|
2392
|
|
|
|
|
2393
|
|
|
while ((res = PATH_REGEXP.exec(str)) != null) { |
|
2394
|
|
|
var m = res[0]; |
|
2395
|
|
|
var escaped = res[1]; |
|
2396
|
|
|
var offset = res.index; |
|
2397
|
|
|
path += str.slice(index, offset); |
|
2398
|
|
|
index = offset + m.length; |
|
2399
|
|
|
|
|
2400
|
|
|
// Ignore already escaped sequences. |
|
2401
|
|
|
if (escaped) { |
|
2402
|
|
|
path += escaped[1]; |
|
2403
|
|
|
continue |
|
2404
|
|
|
} |
|
2405
|
|
|
|
|
2406
|
|
|
var next = str[index]; |
|
2407
|
|
|
var prefix = res[2]; |
|
2408
|
|
|
var name = res[3]; |
|
2409
|
|
|
var capture = res[4]; |
|
2410
|
|
|
var group = res[5]; |
|
2411
|
|
|
var modifier = res[6]; |
|
2412
|
|
|
var asterisk = res[7]; |
|
2413
|
|
|
|
|
2414
|
|
|
// Push the current path onto the tokens. |
|
2415
|
|
|
if (path) { |
|
2416
|
|
|
tokens.push(path); |
|
2417
|
|
|
path = ''; |
|
2418
|
|
|
} |
|
2419
|
|
|
|
|
2420
|
|
|
var partial = prefix != null && next != null && next !== prefix; |
|
2421
|
|
|
var repeat = modifier === '+' || modifier === '*'; |
|
2422
|
|
|
var optional = modifier === '?' || modifier === '*'; |
|
2423
|
|
|
var delimiter = res[2] || defaultDelimiter; |
|
2424
|
|
|
var pattern = capture || group; |
|
2425
|
|
|
|
|
2426
|
|
|
tokens.push({ |
|
2427
|
|
|
name: name || key++, |
|
2428
|
|
|
prefix: prefix || '', |
|
2429
|
|
|
delimiter: delimiter, |
|
2430
|
|
|
optional: optional, |
|
2431
|
|
|
repeat: repeat, |
|
2432
|
|
|
partial: partial, |
|
2433
|
|
|
asterisk: !!asterisk, |
|
2434
|
|
|
pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?') |
|
2435
|
|
|
}); |
|
2436
|
|
|
} |
|
2437
|
|
|
|
|
2438
|
|
|
// Match any characters still remaining. |
|
2439
|
|
|
if (index < str.length) { |
|
2440
|
|
|
path += str.substr(index); |
|
2441
|
|
|
} |
|
2442
|
|
|
|
|
2443
|
|
|
// If the path exists, push it onto the end. |
|
2444
|
|
|
if (path) { |
|
2445
|
|
|
tokens.push(path); |
|
2446
|
|
|
} |
|
2447
|
|
|
|
|
2448
|
|
|
return tokens |
|
2449
|
|
|
} |
|
2450
|
|
|
|
|
2451
|
|
|
/** |
|
2452
|
|
|
* Compile a string to a template function for the path. |
|
2453
|
|
|
* |
|
2454
|
|
|
* @param {string} str |
|
2455
|
|
|
* @param {Object=} options |
|
2456
|
|
|
* @return {!function(Object=, Object=)} |
|
2457
|
|
|
*/ |
|
2458
|
|
|
function compile (str, options) { |
|
2459
|
|
|
return tokensToFunction(parse(str, options)) |
|
2460
|
|
|
} |
|
2461
|
|
|
|
|
2462
|
|
|
/** |
|
2463
|
|
|
* Prettier encoding of URI path segments. |
|
2464
|
|
|
* |
|
2465
|
|
|
* @param {string} |
|
2466
|
|
|
* @return {string} |
|
2467
|
|
|
*/ |
|
2468
|
|
|
function encodeURIComponentPretty (str) { |
|
2469
|
|
|
return encodeURI(str).replace(/[\/?#]/g, function (c) { |
|
2470
|
|
|
return '%' + c.charCodeAt(0).toString(16).toUpperCase() |
|
2471
|
|
|
}) |
|
2472
|
|
|
} |
|
2473
|
|
|
|
|
2474
|
|
|
/** |
|
2475
|
|
|
* Encode the asterisk parameter. Similar to `pretty`, but allows slashes. |
|
2476
|
|
|
* |
|
2477
|
|
|
* @param {string} |
|
2478
|
|
|
* @return {string} |
|
2479
|
|
|
*/ |
|
2480
|
|
|
function encodeAsterisk (str) { |
|
2481
|
|
|
return encodeURI(str).replace(/[?#]/g, function (c) { |
|
2482
|
|
|
return '%' + c.charCodeAt(0).toString(16).toUpperCase() |
|
2483
|
|
|
}) |
|
2484
|
|
|
} |
|
2485
|
|
|
|
|
2486
|
|
|
/** |
|
2487
|
|
|
* Expose a method for transforming tokens into the path function. |
|
2488
|
|
|
*/ |
|
2489
|
|
|
function tokensToFunction (tokens) { |
|
2490
|
|
|
// Compile all the tokens into regexps. |
|
2491
|
|
|
var matches = new Array(tokens.length); |
|
2492
|
|
|
|
|
2493
|
|
|
// Compile all the patterns before compilation. |
|
2494
|
|
|
for (var i = 0; i < tokens.length; i++) { |
|
2495
|
|
|
if (typeof tokens[i] === 'object') { |
|
2496
|
|
|
matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$'); |
|
2497
|
|
|
} |
|
2498
|
|
|
} |
|
2499
|
|
|
|
|
2500
|
|
|
return function (obj, opts) { |
|
2501
|
|
|
var path = ''; |
|
2502
|
|
|
var data = obj || {}; |
|
2503
|
|
|
var options = opts || {}; |
|
2504
|
|
|
var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent; |
|
2505
|
|
|
|
|
2506
|
|
|
for (var i = 0; i < tokens.length; i++) { |
|
2507
|
|
|
var token = tokens[i]; |
|
2508
|
|
|
|
|
2509
|
|
|
if (typeof token === 'string') { |
|
2510
|
|
|
path += token; |
|
2511
|
|
|
|
|
2512
|
|
|
continue |
|
2513
|
|
|
} |
|
2514
|
|
|
|
|
2515
|
|
|
var value = data[token.name]; |
|
2516
|
|
|
var segment; |
|
2517
|
|
|
|
|
2518
|
|
|
if (value == null) { |
|
2519
|
|
|
if (token.optional) { |
|
2520
|
|
|
// Prepend partial segment prefixes. |
|
2521
|
|
|
if (token.partial) { |
|
2522
|
|
|
path += token.prefix; |
|
2523
|
|
|
} |
|
2524
|
|
|
|
|
2525
|
|
|
continue |
|
2526
|
|
|
} else { |
|
2527
|
|
|
throw new TypeError('Expected "' + token.name + '" to be defined') |
|
2528
|
|
|
} |
|
2529
|
|
|
} |
|
2530
|
|
|
|
|
2531
|
|
|
if (isarray(value)) { |
|
2532
|
|
|
if (!token.repeat) { |
|
2533
|
|
|
throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') |
|
2534
|
|
|
} |
|
2535
|
|
|
|
|
2536
|
|
|
if (value.length === 0) { |
|
2537
|
|
|
if (token.optional) { |
|
2538
|
|
|
continue |
|
2539
|
|
|
} else { |
|
2540
|
|
|
throw new TypeError('Expected "' + token.name + '" to not be empty') |
|
2541
|
|
|
} |
|
2542
|
|
|
} |
|
2543
|
|
|
|
|
2544
|
|
|
for (var j = 0; j < value.length; j++) { |
|
2545
|
|
|
segment = encode(value[j]); |
|
2546
|
|
|
|
|
2547
|
|
|
if (!matches[i].test(segment)) { |
|
2548
|
|
|
throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') |
|
2549
|
|
|
} |
|
2550
|
|
|
|
|
2551
|
|
|
path += (j === 0 ? token.prefix : token.delimiter) + segment; |
|
2552
|
|
|
} |
|
2553
|
|
|
|
|
2554
|
|
|
continue |
|
2555
|
|
|
} |
|
2556
|
|
|
|
|
2557
|
|
|
segment = token.asterisk ? encodeAsterisk(value) : encode(value); |
|
2558
|
|
|
|
|
2559
|
|
|
if (!matches[i].test(segment)) { |
|
2560
|
|
|
throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') |
|
2561
|
|
|
} |
|
2562
|
|
|
|
|
2563
|
|
|
path += token.prefix + segment; |
|
2564
|
|
|
} |
|
2565
|
|
|
|
|
2566
|
|
|
return path |
|
2567
|
|
|
} |
|
2568
|
|
|
} |
|
2569
|
|
|
|
|
2570
|
|
|
/** |
|
2571
|
|
|
* Escape a regular expression string. |
|
2572
|
|
|
* |
|
2573
|
|
|
* @param {string} str |
|
2574
|
|
|
* @return {string} |
|
2575
|
|
|
*/ |
|
2576
|
|
|
function escapeString (str) { |
|
2577
|
|
|
return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') |
|
2578
|
|
|
} |
|
2579
|
|
|
|
|
2580
|
|
|
/** |
|
2581
|
|
|
* Escape the capturing group by escaping special characters and meaning. |
|
2582
|
|
|
* |
|
2583
|
|
|
* @param {string} group |
|
2584
|
|
|
* @return {string} |
|
2585
|
|
|
*/ |
|
2586
|
|
|
function escapeGroup (group) { |
|
2587
|
|
|
return group.replace(/([=!:$\/()])/g, '\\$1') |
|
2588
|
|
|
} |
|
2589
|
|
|
|
|
2590
|
|
|
/** |
|
2591
|
|
|
* Attach the keys as a property of the regexp. |
|
2592
|
|
|
* |
|
2593
|
|
|
* @param {!RegExp} re |
|
2594
|
|
|
* @param {Array} keys |
|
2595
|
|
|
* @return {!RegExp} |
|
2596
|
|
|
*/ |
|
2597
|
|
|
function attachKeys (re, keys) { |
|
2598
|
|
|
re.keys = keys; |
|
2599
|
|
|
return re |
|
2600
|
|
|
} |
|
2601
|
|
|
|
|
2602
|
|
|
/** |
|
2603
|
|
|
* Get the flags for a regexp from the options. |
|
2604
|
|
|
* |
|
2605
|
|
|
* @param {Object} options |
|
2606
|
|
|
* @return {string} |
|
2607
|
|
|
*/ |
|
2608
|
|
|
function flags (options) { |
|
2609
|
|
|
return options.sensitive ? '' : 'i' |
|
2610
|
|
|
} |
|
2611
|
|
|
|
|
2612
|
|
|
/** |
|
2613
|
|
|
* Pull out keys from a regexp. |
|
2614
|
|
|
* |
|
2615
|
|
|
* @param {!RegExp} path |
|
2616
|
|
|
* @param {!Array} keys |
|
2617
|
|
|
* @return {!RegExp} |
|
2618
|
|
|
*/ |
|
2619
|
|
|
function regexpToRegexp (path, keys) { |
|
2620
|
|
|
// Use a negative lookahead to match only capturing groups. |
|
2621
|
|
|
var groups = path.source.match(/\((?!\?)/g); |
|
2622
|
|
|
|
|
2623
|
|
|
if (groups) { |
|
2624
|
|
|
for (var i = 0; i < groups.length; i++) { |
|
2625
|
|
|
keys.push({ |
|
2626
|
|
|
name: i, |
|
2627
|
|
|
prefix: null, |
|
2628
|
|
|
delimiter: null, |
|
2629
|
|
|
optional: false, |
|
2630
|
|
|
repeat: false, |
|
2631
|
|
|
partial: false, |
|
2632
|
|
|
asterisk: false, |
|
2633
|
|
|
pattern: null |
|
2634
|
|
|
}); |
|
2635
|
|
|
} |
|
2636
|
|
|
} |
|
2637
|
|
|
|
|
2638
|
|
|
return attachKeys(path, keys) |
|
2639
|
|
|
} |
|
2640
|
|
|
|
|
2641
|
|
|
/** |
|
2642
|
|
|
* Transform an array into a regexp. |
|
2643
|
|
|
* |
|
2644
|
|
|
* @param {!Array} path |
|
2645
|
|
|
* @param {Array} keys |
|
2646
|
|
|
* @param {!Object} options |
|
2647
|
|
|
* @return {!RegExp} |
|
2648
|
|
|
*/ |
|
2649
|
|
|
function arrayToRegexp (path, keys, options) { |
|
2650
|
|
|
var parts = []; |
|
2651
|
|
|
|
|
2652
|
|
|
for (var i = 0; i < path.length; i++) { |
|
2653
|
|
|
parts.push(pathToRegexp(path[i], keys, options).source); |
|
2654
|
|
|
} |
|
2655
|
|
|
|
|
2656
|
|
|
var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)); |
|
2657
|
|
|
|
|
2658
|
|
|
return attachKeys(regexp, keys) |
|
2659
|
|
|
} |
|
2660
|
|
|
|
|
2661
|
|
|
/** |
|
2662
|
|
|
* Create a path regexp from string input. |
|
2663
|
|
|
* |
|
2664
|
|
|
* @param {string} path |
|
2665
|
|
|
* @param {!Array} keys |
|
2666
|
|
|
* @param {!Object} options |
|
2667
|
|
|
* @return {!RegExp} |
|
2668
|
|
|
*/ |
|
2669
|
|
|
function stringToRegexp (path, keys, options) { |
|
2670
|
|
|
return tokensToRegExp(parse(path, options), keys, options) |
|
2671
|
|
|
} |
|
2672
|
|
|
|
|
2673
|
|
|
/** |
|
2674
|
|
|
* Expose a function for taking tokens and returning a RegExp. |
|
2675
|
|
|
* |
|
2676
|
|
|
* @param {!Array} tokens |
|
2677
|
|
|
* @param {(Array|Object)=} keys |
|
2678
|
|
|
* @param {Object=} options |
|
2679
|
|
|
* @return {!RegExp} |
|
2680
|
|
|
*/ |
|
2681
|
|
|
function tokensToRegExp (tokens, keys, options) { |
|
2682
|
|
|
if (!isarray(keys)) { |
|
2683
|
|
|
options = /** @type {!Object} */ (keys || options); |
|
2684
|
|
|
keys = []; |
|
2685
|
|
|
} |
|
2686
|
|
|
|
|
2687
|
|
|
options = options || {}; |
|
2688
|
|
|
|
|
2689
|
|
|
var strict = options.strict; |
|
2690
|
|
|
var end = options.end !== false; |
|
2691
|
|
|
var route = ''; |
|
2692
|
|
|
|
|
2693
|
|
|
// Iterate over the tokens and create our regexp string. |
|
2694
|
|
|
for (var i = 0; i < tokens.length; i++) { |
|
2695
|
|
|
var token = tokens[i]; |
|
2696
|
|
|
|
|
2697
|
|
|
if (typeof token === 'string') { |
|
2698
|
|
|
route += escapeString(token); |
|
2699
|
|
|
} else { |
|
2700
|
|
|
var prefix = escapeString(token.prefix); |
|
2701
|
|
|
var capture = '(?:' + token.pattern + ')'; |
|
2702
|
|
|
|
|
2703
|
|
|
keys.push(token); |
|
2704
|
|
|
|
|
2705
|
|
|
if (token.repeat) { |
|
2706
|
|
|
capture += '(?:' + prefix + capture + ')*'; |
|
2707
|
|
|
} |
|
2708
|
|
|
|
|
2709
|
|
|
if (token.optional) { |
|
2710
|
|
|
if (!token.partial) { |
|
2711
|
|
|
capture = '(?:' + prefix + '(' + capture + '))?'; |
|
2712
|
|
|
} else { |
|
2713
|
|
|
capture = prefix + '(' + capture + ')?'; |
|
2714
|
|
|
} |
|
2715
|
|
|
} else { |
|
2716
|
|
|
capture = prefix + '(' + capture + ')'; |
|
2717
|
|
|
} |
|
2718
|
|
|
|
|
2719
|
|
|
route += capture; |
|
2720
|
|
|
} |
|
2721
|
|
|
} |
|
2722
|
|
|
|
|
2723
|
|
|
var delimiter = escapeString(options.delimiter || '/'); |
|
2724
|
|
|
var endsWithDelimiter = route.slice(-delimiter.length) === delimiter; |
|
2725
|
|
|
|
|
2726
|
|
|
// In non-strict mode we allow a slash at the end of match. If the path to |
|
2727
|
|
|
// match already ends with a slash, we remove it for consistency. The slash |
|
2728
|
|
|
// is valid at the end of a path match, not in the middle. This is important |
|
2729
|
|
|
// in non-ending mode, where "/test/" shouldn't match "/test//route". |
|
2730
|
|
|
if (!strict) { |
|
2731
|
|
|
route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'; |
|
2732
|
|
|
} |
|
2733
|
|
|
|
|
2734
|
|
|
if (end) { |
|
2735
|
|
|
route += '$'; |
|
2736
|
|
|
} else { |
|
2737
|
|
|
// In non-ending mode, we need the capturing groups to match as much as |
|
2738
|
|
|
// possible by using a positive lookahead to the end or next path segment. |
|
2739
|
|
|
route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'; |
|
2740
|
|
|
} |
|
2741
|
|
|
|
|
2742
|
|
|
return attachKeys(new RegExp('^' + route, flags(options)), keys) |
|
2743
|
|
|
} |
|
2744
|
|
|
|
|
2745
|
|
|
/** |
|
2746
|
|
|
* Normalize the given path string, returning a regular expression. |
|
2747
|
|
|
* |
|
2748
|
|
|
* An empty array can be passed in for the keys, which will hold the |
|
2749
|
|
|
* placeholder key descriptions. For example, using `/user/:id`, `keys` will |
|
2750
|
|
|
* contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. |
|
2751
|
|
|
* |
|
2752
|
|
|
* @param {(string|RegExp|Array)} path |
|
2753
|
|
|
* @param {(Array|Object)=} keys |
|
2754
|
|
|
* @param {Object=} options |
|
2755
|
|
|
* @return {!RegExp} |
|
2756
|
|
|
*/ |
|
2757
|
|
|
function pathToRegexp (path, keys, options) { |
|
2758
|
|
|
if (!isarray(keys)) { |
|
2759
|
|
|
options = /** @type {!Object} */ (keys || options); |
|
2760
|
|
|
keys = []; |
|
2761
|
|
|
} |
|
2762
|
|
|
|
|
2763
|
|
|
options = options || {}; |
|
2764
|
|
|
|
|
2765
|
|
|
if (path instanceof RegExp) { |
|
2766
|
|
|
return regexpToRegexp(path, /** @type {!Array} */ (keys)) |
|
2767
|
|
|
} |
|
2768
|
|
|
|
|
2769
|
|
|
if (isarray(path)) { |
|
2770
|
|
|
return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) |
|
2771
|
|
|
} |
|
2772
|
|
|
|
|
2773
|
|
|
return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) |
|
2774
|
|
|
} |
|
2775
|
|
|
pathToRegexp_1.parse = parse_1; |
|
2776
|
|
|
pathToRegexp_1.compile = compile_1; |
|
2777
|
|
|
pathToRegexp_1.tokensToFunction = tokensToFunction_1; |
|
2778
|
|
|
pathToRegexp_1.tokensToRegExp = tokensToRegExp_1; |
|
2779
|
|
|
|
|
2780
|
|
|
function _objectWithoutPropertiesLoose(source, excluded) { |
|
2781
|
|
|
if (source == null) return {}; |
|
2782
|
|
|
var target = {}; |
|
2783
|
|
|
var sourceKeys = Object.keys(source); |
|
2784
|
|
|
var key, i; |
|
2785
|
|
|
|
|
2786
|
|
|
for (i = 0; i < sourceKeys.length; i++) { |
|
2787
|
|
|
key = sourceKeys[i]; |
|
2788
|
|
|
if (excluded.indexOf(key) >= 0) continue; |
|
2789
|
|
|
target[key] = source[key]; |
|
2790
|
|
|
} |
|
2791
|
|
|
|
|
2792
|
|
|
return target; |
|
2793
|
|
|
} |
|
2794
|
|
|
|
|
2795
|
|
|
/** |
|
2796
|
|
|
* Copyright 2015, Yahoo! Inc. |
|
2797
|
|
|
* Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. |
|
2798
|
|
|
*/ |
|
2799
|
|
|
|
|
2800
|
|
|
var REACT_STATICS = { |
|
2801
|
|
|
childContextTypes: true, |
|
2802
|
|
|
contextType: true, |
|
2803
|
|
|
contextTypes: true, |
|
2804
|
|
|
defaultProps: true, |
|
2805
|
|
|
displayName: true, |
|
2806
|
|
|
getDefaultProps: true, |
|
2807
|
|
|
getDerivedStateFromError: true, |
|
2808
|
|
|
getDerivedStateFromProps: true, |
|
2809
|
|
|
mixins: true, |
|
2810
|
|
|
propTypes: true, |
|
2811
|
|
|
type: true |
|
2812
|
|
|
}; |
|
2813
|
|
|
|
|
2814
|
|
|
var KNOWN_STATICS = { |
|
2815
|
|
|
name: true, |
|
2816
|
|
|
length: true, |
|
2817
|
|
|
prototype: true, |
|
2818
|
|
|
caller: true, |
|
2819
|
|
|
callee: true, |
|
2820
|
|
|
arguments: true, |
|
2821
|
|
|
arity: true |
|
2822
|
|
|
}; |
|
2823
|
|
|
|
|
2824
|
|
|
var FORWARD_REF_STATICS = { |
|
2825
|
|
|
'$$typeof': true, |
|
2826
|
|
|
render: true, |
|
2827
|
|
|
defaultProps: true, |
|
2828
|
|
|
displayName: true, |
|
2829
|
|
|
propTypes: true |
|
2830
|
|
|
}; |
|
2831
|
|
|
|
|
2832
|
|
|
var MEMO_STATICS = { |
|
2833
|
|
|
'$$typeof': true, |
|
2834
|
|
|
compare: true, |
|
2835
|
|
|
defaultProps: true, |
|
2836
|
|
|
displayName: true, |
|
2837
|
|
|
propTypes: true, |
|
2838
|
|
|
type: true |
|
2839
|
|
|
}; |
|
2840
|
|
|
|
|
2841
|
|
|
var TYPE_STATICS = {}; |
|
2842
|
|
|
TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS; |
|
2843
|
|
|
|
|
2844
|
|
|
function getStatics(component) { |
|
2845
|
|
|
if (reactIs.isMemo(component)) { |
|
2846
|
|
|
return MEMO_STATICS; |
|
2847
|
|
|
} |
|
2848
|
|
|
return TYPE_STATICS[component['$$typeof']] || REACT_STATICS; |
|
2849
|
|
|
} |
|
2850
|
|
|
|
|
2851
|
|
|
var defineProperty = Object.defineProperty; |
|
2852
|
|
|
var getOwnPropertyNames = Object.getOwnPropertyNames; |
|
2853
|
|
|
var getOwnPropertySymbols$1 = Object.getOwnPropertySymbols; |
|
2854
|
|
|
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; |
|
2855
|
|
|
var getPrototypeOf = Object.getPrototypeOf; |
|
2856
|
|
|
var objectPrototype = Object.prototype; |
|
2857
|
|
|
|
|
2858
|
|
|
function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) { |
|
2859
|
|
|
if (typeof sourceComponent !== 'string') { |
|
2860
|
|
|
// don't hoist over string (html) components |
|
2861
|
|
|
|
|
2862
|
|
|
if (objectPrototype) { |
|
2863
|
|
|
var inheritedComponent = getPrototypeOf(sourceComponent); |
|
2864
|
|
|
if (inheritedComponent && inheritedComponent !== objectPrototype) { |
|
2865
|
|
|
hoistNonReactStatics(targetComponent, inheritedComponent, blacklist); |
|
2866
|
|
|
} |
|
2867
|
|
|
} |
|
2868
|
|
|
|
|
2869
|
|
|
var keys = getOwnPropertyNames(sourceComponent); |
|
2870
|
|
|
|
|
2871
|
|
|
if (getOwnPropertySymbols$1) { |
|
2872
|
|
|
keys = keys.concat(getOwnPropertySymbols$1(sourceComponent)); |
|
2873
|
|
|
} |
|
2874
|
|
|
|
|
2875
|
|
|
var targetStatics = getStatics(targetComponent); |
|
2876
|
|
|
var sourceStatics = getStatics(sourceComponent); |
|
2877
|
|
|
|
|
2878
|
|
|
for (var i = 0; i < keys.length; ++i) { |
|
2879
|
|
|
var key = keys[i]; |
|
2880
|
|
|
if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) { |
|
2881
|
|
|
var descriptor = getOwnPropertyDescriptor(sourceComponent, key); |
|
2882
|
|
|
try { |
|
2883
|
|
|
// Avoid failures from read-only properties |
|
2884
|
|
|
defineProperty(targetComponent, key, descriptor); |
|
2885
|
|
|
} catch (e) {} |
|
2886
|
|
|
} |
|
2887
|
|
|
} |
|
2888
|
|
|
|
|
2889
|
|
|
return targetComponent; |
|
2890
|
|
|
} |
|
2891
|
|
|
|
|
2892
|
|
|
return targetComponent; |
|
2893
|
|
|
} |
|
2894
|
|
|
|
|
2895
|
|
|
var hoistNonReactStatics_cjs = hoistNonReactStatics; |
|
2896
|
|
|
|
|
2897
|
|
|
var createNamedContext = function createNamedContext(name) { |
|
2898
|
|
|
var context = index(); |
|
2899
|
|
|
context.displayName = name; |
|
2900
|
|
|
return context; |
|
2901
|
|
|
}; |
|
2902
|
|
|
|
|
2903
|
|
|
var context = |
|
2904
|
|
|
/*#__PURE__*/ |
|
2905
|
|
|
createNamedContext("Router"); |
|
2906
|
|
|
/** |
|
2907
|
|
|
* The public API for putting history on context. |
|
2908
|
|
|
*/ |
|
2909
|
|
|
|
|
2910
|
|
|
var Router = |
|
2911
|
|
|
/*#__PURE__*/ |
|
2912
|
|
|
function (_React$Component) { |
|
2913
|
|
|
_inheritsLoose(Router, _React$Component); |
|
2914
|
|
|
|
|
2915
|
|
|
Router.computeRootMatch = function computeRootMatch(pathname) { |
|
2916
|
|
|
return { |
|
2917
|
|
|
path: "/", |
|
2918
|
|
|
url: "/", |
|
2919
|
|
|
params: {}, |
|
2920
|
|
|
isExact: pathname === "/" |
|
2921
|
|
|
}; |
|
2922
|
|
|
}; |
|
2923
|
|
|
|
|
2924
|
|
|
function Router(props) { |
|
2925
|
|
|
var _this; |
|
2926
|
|
|
|
|
2927
|
|
|
_this = _React$Component.call(this, props) || this; |
|
2928
|
|
|
_this.state = { |
|
2929
|
|
|
location: props.history.location |
|
2930
|
|
|
}; // This is a bit of a hack. We have to start listening for location |
|
2931
|
|
|
// changes here in the constructor in case there are any <Redirect>s |
|
2932
|
|
|
// on the initial render. If there are, they will replace/push when |
|
2933
|
|
|
// they mount and since cDM fires in children before parents, we may |
|
2934
|
|
|
// get a new location before the <Router> is mounted. |
|
2935
|
|
|
|
|
2936
|
|
|
_this._isMounted = false; |
|
2937
|
|
|
_this._pendingLocation = null; |
|
2938
|
|
|
|
|
2939
|
|
|
if (!props.staticContext) { |
|
2940
|
|
|
_this.unlisten = props.history.listen(function (location) { |
|
2941
|
|
|
if (_this._isMounted) { |
|
2942
|
|
|
_this.setState({ |
|
2943
|
|
|
location: location |
|
2944
|
|
|
}); |
|
2945
|
|
|
} else { |
|
2946
|
|
|
_this._pendingLocation = location; |
|
2947
|
|
|
} |
|
2948
|
|
|
}); |
|
2949
|
|
|
} |
|
2950
|
|
|
|
|
2951
|
|
|
return _this; |
|
2952
|
|
|
} |
|
2953
|
|
|
|
|
2954
|
|
|
var _proto = Router.prototype; |
|
2955
|
|
|
|
|
2956
|
|
|
_proto.componentDidMount = function componentDidMount() { |
|
2957
|
|
|
this._isMounted = true; |
|
2958
|
|
|
|
|
2959
|
|
|
if (this._pendingLocation) { |
|
2960
|
|
|
this.setState({ |
|
2961
|
|
|
location: this._pendingLocation |
|
2962
|
|
|
}); |
|
2963
|
|
|
} |
|
2964
|
|
|
}; |
|
2965
|
|
|
|
|
2966
|
|
|
_proto.componentWillUnmount = function componentWillUnmount() { |
|
2967
|
|
|
if (this.unlisten) this.unlisten(); |
|
2968
|
|
|
}; |
|
2969
|
|
|
|
|
2970
|
|
|
_proto.render = function render() { |
|
2971
|
|
|
return React__default.createElement(context.Provider, { |
|
2972
|
|
|
children: this.props.children || null, |
|
2973
|
|
|
value: { |
|
2974
|
|
|
history: this.props.history, |
|
2975
|
|
|
location: this.state.location, |
|
2976
|
|
|
match: Router.computeRootMatch(this.state.location.pathname), |
|
2977
|
|
|
staticContext: this.props.staticContext |
|
2978
|
|
|
} |
|
2979
|
|
|
}); |
|
2980
|
|
|
}; |
|
2981
|
|
|
|
|
2982
|
|
|
return Router; |
|
2983
|
|
|
}(React__default.Component); |
|
2984
|
|
|
|
|
2985
|
|
|
{ |
|
2986
|
|
|
Router.propTypes = { |
|
2987
|
|
|
children: propTypes.node, |
|
2988
|
|
|
history: propTypes.object.isRequired, |
|
2989
|
|
|
staticContext: propTypes.object |
|
2990
|
|
|
}; |
|
2991
|
|
|
|
|
2992
|
|
|
Router.prototype.componentDidUpdate = function (prevProps) { |
|
2993
|
|
|
warning(prevProps.history === this.props.history, "You cannot change <Router history>") ; |
|
2994
|
|
|
}; |
|
2995
|
|
|
} |
|
2996
|
|
|
/** |
|
2997
|
|
|
* The public API for a <Router> that stores location in memory. |
|
2998
|
|
|
*/ |
|
2999
|
|
|
|
|
3000
|
|
|
|
|
3001
|
|
|
var MemoryRouter = |
|
3002
|
|
|
/*#__PURE__*/ |
|
3003
|
|
|
function (_React$Component) { |
|
3004
|
|
|
_inheritsLoose(MemoryRouter, _React$Component); |
|
3005
|
|
|
|
|
3006
|
|
|
function MemoryRouter() { |
|
3007
|
|
|
var _this; |
|
3008
|
|
|
|
|
3009
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { |
|
3010
|
|
|
args[_key] = arguments[_key]; |
|
3011
|
|
|
} |
|
3012
|
|
|
|
|
3013
|
|
|
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; |
|
3014
|
|
|
_this.history = createMemoryHistory(_this.props); |
|
3015
|
|
|
return _this; |
|
3016
|
|
|
} |
|
3017
|
|
|
|
|
3018
|
|
|
var _proto = MemoryRouter.prototype; |
|
3019
|
|
|
|
|
3020
|
|
|
_proto.render = function render() { |
|
3021
|
|
|
return React__default.createElement(Router, { |
|
3022
|
|
|
history: this.history, |
|
3023
|
|
|
children: this.props.children |
|
3024
|
|
|
}); |
|
3025
|
|
|
}; |
|
3026
|
|
|
|
|
3027
|
|
|
return MemoryRouter; |
|
3028
|
|
|
}(React__default.Component); |
|
3029
|
|
|
|
|
3030
|
|
|
{ |
|
3031
|
|
|
MemoryRouter.propTypes = { |
|
3032
|
|
|
initialEntries: propTypes.array, |
|
3033
|
|
|
initialIndex: propTypes.number, |
|
3034
|
|
|
getUserConfirmation: propTypes.func, |
|
3035
|
|
|
keyLength: propTypes.number, |
|
3036
|
|
|
children: propTypes.node |
|
3037
|
|
|
}; |
|
3038
|
|
|
|
|
3039
|
|
|
MemoryRouter.prototype.componentDidMount = function () { |
|
3040
|
|
|
warning(!this.props.history, "<MemoryRouter> ignores the history prop. To use a custom history, " + "use `import { Router }` instead of `import { MemoryRouter as Router }`.") ; |
|
3041
|
|
|
}; |
|
3042
|
|
|
} |
|
3043
|
|
|
|
|
3044
|
|
|
var Lifecycle = |
|
3045
|
|
|
/*#__PURE__*/ |
|
3046
|
|
|
function (_React$Component) { |
|
3047
|
|
|
_inheritsLoose(Lifecycle, _React$Component); |
|
3048
|
|
|
|
|
3049
|
|
|
function Lifecycle() { |
|
3050
|
|
|
return _React$Component.apply(this, arguments) || this; |
|
3051
|
|
|
} |
|
3052
|
|
|
|
|
3053
|
|
|
var _proto = Lifecycle.prototype; |
|
3054
|
|
|
|
|
3055
|
|
|
_proto.componentDidMount = function componentDidMount() { |
|
3056
|
|
|
if (this.props.onMount) this.props.onMount.call(this, this); |
|
3057
|
|
|
}; |
|
3058
|
|
|
|
|
3059
|
|
|
_proto.componentDidUpdate = function componentDidUpdate(prevProps) { |
|
3060
|
|
|
if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps); |
|
3061
|
|
|
}; |
|
3062
|
|
|
|
|
3063
|
|
|
_proto.componentWillUnmount = function componentWillUnmount() { |
|
3064
|
|
|
if (this.props.onUnmount) this.props.onUnmount.call(this, this); |
|
3065
|
|
|
}; |
|
3066
|
|
|
|
|
3067
|
|
|
_proto.render = function render() { |
|
3068
|
|
|
return null; |
|
3069
|
|
|
}; |
|
3070
|
|
|
|
|
3071
|
|
|
return Lifecycle; |
|
3072
|
|
|
}(React__default.Component); |
|
3073
|
|
|
/** |
|
3074
|
|
|
* The public API for prompting the user before navigating away from a screen. |
|
3075
|
|
|
*/ |
|
3076
|
|
|
|
|
3077
|
|
|
|
|
3078
|
|
|
function Prompt(_ref) { |
|
3079
|
|
|
var message = _ref.message, |
|
3080
|
|
|
_ref$when = _ref.when, |
|
3081
|
|
|
when = _ref$when === void 0 ? true : _ref$when; |
|
3082
|
|
|
return React__default.createElement(context.Consumer, null, function (context) { |
|
3083
|
|
|
!context ? invariant(false, "You should not use <Prompt> outside a <Router>") : void 0; |
|
3084
|
|
|
if (!when || context.staticContext) return null; |
|
3085
|
|
|
var method = context.history.block; |
|
3086
|
|
|
return React__default.createElement(Lifecycle, { |
|
3087
|
|
|
onMount: function onMount(self) { |
|
3088
|
|
|
self.release = method(message); |
|
3089
|
|
|
}, |
|
3090
|
|
|
onUpdate: function onUpdate(self, prevProps) { |
|
3091
|
|
|
if (prevProps.message !== message) { |
|
3092
|
|
|
self.release(); |
|
3093
|
|
|
self.release = method(message); |
|
3094
|
|
|
} |
|
3095
|
|
|
}, |
|
3096
|
|
|
onUnmount: function onUnmount(self) { |
|
3097
|
|
|
self.release(); |
|
3098
|
|
|
}, |
|
3099
|
|
|
message: message |
|
3100
|
|
|
}); |
|
3101
|
|
|
}); |
|
3102
|
|
|
} |
|
3103
|
|
|
|
|
3104
|
|
|
{ |
|
3105
|
|
|
var messageType = propTypes.oneOfType([propTypes.func, propTypes.string]); |
|
3106
|
|
|
Prompt.propTypes = { |
|
3107
|
|
|
when: propTypes.bool, |
|
3108
|
|
|
message: messageType.isRequired |
|
3109
|
|
|
}; |
|
3110
|
|
|
} |
|
3111
|
|
|
|
|
3112
|
|
|
var cache = {}; |
|
3113
|
|
|
var cacheLimit = 10000; |
|
3114
|
|
|
var cacheCount = 0; |
|
3115
|
|
|
|
|
3116
|
|
|
function compilePath(path) { |
|
3117
|
|
|
if (cache[path]) return cache[path]; |
|
3118
|
|
|
var generator = pathToRegexp_1.compile(path); |
|
3119
|
|
|
|
|
3120
|
|
|
if (cacheCount < cacheLimit) { |
|
3121
|
|
|
cache[path] = generator; |
|
3122
|
|
|
cacheCount++; |
|
3123
|
|
|
} |
|
3124
|
|
|
|
|
3125
|
|
|
return generator; |
|
3126
|
|
|
} |
|
3127
|
|
|
/** |
|
3128
|
|
|
* Public API for generating a URL pathname from a path and parameters. |
|
3129
|
|
|
*/ |
|
3130
|
|
|
|
|
3131
|
|
|
|
|
3132
|
|
|
function generatePath(path, params) { |
|
3133
|
|
|
if (path === void 0) { |
|
3134
|
|
|
path = "/"; |
|
3135
|
|
|
} |
|
3136
|
|
|
|
|
3137
|
|
|
if (params === void 0) { |
|
3138
|
|
|
params = {}; |
|
3139
|
|
|
} |
|
3140
|
|
|
|
|
3141
|
|
|
return path === "/" ? path : compilePath(path)(params, { |
|
3142
|
|
|
pretty: true |
|
3143
|
|
|
}); |
|
3144
|
|
|
} |
|
3145
|
|
|
/** |
|
3146
|
|
|
* The public API for navigating programmatically with a component. |
|
3147
|
|
|
*/ |
|
3148
|
|
|
|
|
3149
|
|
|
|
|
3150
|
|
|
function Redirect(_ref) { |
|
3151
|
|
|
var computedMatch = _ref.computedMatch, |
|
3152
|
|
|
to = _ref.to, |
|
3153
|
|
|
_ref$push = _ref.push, |
|
3154
|
|
|
push = _ref$push === void 0 ? false : _ref$push; |
|
3155
|
|
|
return React__default.createElement(context.Consumer, null, function (context) { |
|
3156
|
|
|
!context ? invariant(false, "You should not use <Redirect> outside a <Router>") : void 0; |
|
3157
|
|
|
var history = context.history, |
|
3158
|
|
|
staticContext = context.staticContext; |
|
3159
|
|
|
var method = push ? history.push : history.replace; |
|
3160
|
|
|
var location = createLocation(computedMatch ? typeof to === "string" ? generatePath(to, computedMatch.params) : _extends({}, to, { |
|
3161
|
|
|
pathname: generatePath(to.pathname, computedMatch.params) |
|
3162
|
|
|
}) : to); // When rendering in a static context, |
|
3163
|
|
|
// set the new location immediately. |
|
3164
|
|
|
|
|
3165
|
|
|
if (staticContext) { |
|
3166
|
|
|
method(location); |
|
3167
|
|
|
return null; |
|
3168
|
|
|
} |
|
3169
|
|
|
|
|
3170
|
|
|
return React__default.createElement(Lifecycle, { |
|
3171
|
|
|
onMount: function onMount() { |
|
3172
|
|
|
method(location); |
|
3173
|
|
|
}, |
|
3174
|
|
|
onUpdate: function onUpdate(self, prevProps) { |
|
3175
|
|
|
var prevLocation = createLocation(prevProps.to); |
|
3176
|
|
|
|
|
3177
|
|
|
if (!locationsAreEqual(prevLocation, _extends({}, location, { |
|
3178
|
|
|
key: prevLocation.key |
|
3179
|
|
|
}))) { |
|
3180
|
|
|
method(location); |
|
3181
|
|
|
} |
|
3182
|
|
|
}, |
|
3183
|
|
|
to: to |
|
3184
|
|
|
}); |
|
3185
|
|
|
}); |
|
3186
|
|
|
} |
|
3187
|
|
|
|
|
3188
|
|
|
{ |
|
3189
|
|
|
Redirect.propTypes = { |
|
3190
|
|
|
push: propTypes.bool, |
|
3191
|
|
|
from: propTypes.string, |
|
3192
|
|
|
to: propTypes.oneOfType([propTypes.string, propTypes.object]).isRequired |
|
3193
|
|
|
}; |
|
3194
|
|
|
} |
|
3195
|
|
|
|
|
3196
|
|
|
var cache$1 = {}; |
|
3197
|
|
|
var cacheLimit$1 = 10000; |
|
3198
|
|
|
var cacheCount$1 = 0; |
|
3199
|
|
|
|
|
3200
|
|
|
function compilePath$1(path, options) { |
|
3201
|
|
|
var cacheKey = "" + options.end + options.strict + options.sensitive; |
|
3202
|
|
|
var pathCache = cache$1[cacheKey] || (cache$1[cacheKey] = {}); |
|
3203
|
|
|
if (pathCache[path]) return pathCache[path]; |
|
3204
|
|
|
var keys = []; |
|
3205
|
|
|
var regexp = pathToRegexp_1(path, keys, options); |
|
3206
|
|
|
var result = { |
|
3207
|
|
|
regexp: regexp, |
|
3208
|
|
|
keys: keys |
|
3209
|
|
|
}; |
|
3210
|
|
|
|
|
3211
|
|
|
if (cacheCount$1 < cacheLimit$1) { |
|
3212
|
|
|
pathCache[path] = result; |
|
3213
|
|
|
cacheCount$1++; |
|
3214
|
|
|
} |
|
3215
|
|
|
|
|
3216
|
|
|
return result; |
|
3217
|
|
|
} |
|
3218
|
|
|
/** |
|
3219
|
|
|
* Public API for matching a URL pathname to a path. |
|
3220
|
|
|
*/ |
|
3221
|
|
|
|
|
3222
|
|
|
|
|
3223
|
|
|
function matchPath(pathname, options) { |
|
3224
|
|
|
if (options === void 0) { |
|
3225
|
|
|
options = {}; |
|
3226
|
|
|
} |
|
3227
|
|
|
|
|
3228
|
|
|
if (typeof options === "string" || Array.isArray(options)) { |
|
3229
|
|
|
options = { |
|
3230
|
|
|
path: options |
|
3231
|
|
|
}; |
|
3232
|
|
|
} |
|
3233
|
|
|
|
|
3234
|
|
|
var _options = options, |
|
3235
|
|
|
path = _options.path, |
|
3236
|
|
|
_options$exact = _options.exact, |
|
3237
|
|
|
exact = _options$exact === void 0 ? false : _options$exact, |
|
3238
|
|
|
_options$strict = _options.strict, |
|
3239
|
|
|
strict = _options$strict === void 0 ? false : _options$strict, |
|
3240
|
|
|
_options$sensitive = _options.sensitive, |
|
3241
|
|
|
sensitive = _options$sensitive === void 0 ? false : _options$sensitive; |
|
3242
|
|
|
var paths = [].concat(path); |
|
3243
|
|
|
return paths.reduce(function (matched, path) { |
|
3244
|
|
|
if (!path && path !== "") return null; |
|
3245
|
|
|
if (matched) return matched; |
|
3246
|
|
|
|
|
3247
|
|
|
var _compilePath = compilePath$1(path, { |
|
3248
|
|
|
end: exact, |
|
3249
|
|
|
strict: strict, |
|
3250
|
|
|
sensitive: sensitive |
|
3251
|
|
|
}), |
|
3252
|
|
|
regexp = _compilePath.regexp, |
|
3253
|
|
|
keys = _compilePath.keys; |
|
3254
|
|
|
|
|
3255
|
|
|
var match = regexp.exec(pathname); |
|
3256
|
|
|
if (!match) return null; |
|
3257
|
|
|
var url = match[0], |
|
3258
|
|
|
values = match.slice(1); |
|
3259
|
|
|
var isExact = pathname === url; |
|
3260
|
|
|
if (exact && !isExact) return null; |
|
3261
|
|
|
return { |
|
3262
|
|
|
path: path, |
|
3263
|
|
|
// the path used to match |
|
3264
|
|
|
url: path === "/" && url === "" ? "/" : url, |
|
3265
|
|
|
// the matched portion of the URL |
|
3266
|
|
|
isExact: isExact, |
|
3267
|
|
|
// whether or not we matched exactly |
|
3268
|
|
|
params: keys.reduce(function (memo, key, index) { |
|
3269
|
|
|
memo[key.name] = values[index]; |
|
3270
|
|
|
return memo; |
|
3271
|
|
|
}, {}) |
|
3272
|
|
|
}; |
|
3273
|
|
|
}, null); |
|
3274
|
|
|
} |
|
3275
|
|
|
|
|
3276
|
|
|
function isEmptyChildren(children) { |
|
3277
|
|
|
return React__default.Children.count(children) === 0; |
|
3278
|
|
|
} |
|
3279
|
|
|
|
|
3280
|
|
|
function evalChildrenDev(children, props, path) { |
|
3281
|
|
|
var value = children(props); |
|
3282
|
|
|
warning(value !== undefined, "You returned `undefined` from the `children` function of " + ("<Route" + (path ? " path=\"" + path + "\"" : "") + ">, but you ") + "should have returned a React element or `null`") ; |
|
3283
|
|
|
return value || null; |
|
3284
|
|
|
} |
|
3285
|
|
|
/** |
|
3286
|
|
|
* The public API for matching a single path and rendering. |
|
3287
|
|
|
*/ |
|
3288
|
|
|
|
|
3289
|
|
|
|
|
3290
|
|
|
var Route = |
|
3291
|
|
|
/*#__PURE__*/ |
|
3292
|
|
|
function (_React$Component) { |
|
3293
|
|
|
_inheritsLoose(Route, _React$Component); |
|
3294
|
|
|
|
|
3295
|
|
|
function Route() { |
|
3296
|
|
|
return _React$Component.apply(this, arguments) || this; |
|
3297
|
|
|
} |
|
3298
|
|
|
|
|
3299
|
|
|
var _proto = Route.prototype; |
|
3300
|
|
|
|
|
3301
|
|
|
_proto.render = function render() { |
|
3302
|
|
|
var _this = this; |
|
3303
|
|
|
|
|
3304
|
|
|
return React__default.createElement(context.Consumer, null, function (context$1) { |
|
3305
|
|
|
!context$1 ? invariant(false, "You should not use <Route> outside a <Router>") : void 0; |
|
3306
|
|
|
var location = _this.props.location || context$1.location; |
|
3307
|
|
|
var match = _this.props.computedMatch ? _this.props.computedMatch // <Switch> already computed the match for us |
|
3308
|
|
|
: _this.props.path ? matchPath(location.pathname, _this.props) : context$1.match; |
|
3309
|
|
|
|
|
3310
|
|
|
var props = _extends({}, context$1, { |
|
3311
|
|
|
location: location, |
|
3312
|
|
|
match: match |
|
3313
|
|
|
}); |
|
3314
|
|
|
|
|
3315
|
|
|
var _this$props = _this.props, |
|
3316
|
|
|
children = _this$props.children, |
|
3317
|
|
|
component = _this$props.component, |
|
3318
|
|
|
render = _this$props.render; // Preact uses an empty array as children by |
|
3319
|
|
|
// default, so use null if that's the case. |
|
3320
|
|
|
|
|
3321
|
|
|
if (Array.isArray(children) && children.length === 0) { |
|
3322
|
|
|
children = null; |
|
3323
|
|
|
} |
|
3324
|
|
|
|
|
3325
|
|
|
return React__default.createElement(context.Provider, { |
|
3326
|
|
|
value: props |
|
3327
|
|
|
}, props.match ? children ? typeof children === "function" ? evalChildrenDev(children, props, _this.props.path) : children : component ? React__default.createElement(component, props) : render ? render(props) : null : typeof children === "function" ? evalChildrenDev(children, props, _this.props.path) : null); |
|
3328
|
|
|
}); |
|
3329
|
|
|
}; |
|
3330
|
|
|
|
|
3331
|
|
|
return Route; |
|
3332
|
|
|
}(React__default.Component); |
|
3333
|
|
|
|
|
3334
|
|
|
{ |
|
3335
|
|
|
Route.propTypes = { |
|
3336
|
|
|
children: propTypes.oneOfType([propTypes.func, propTypes.node]), |
|
3337
|
|
|
component: function component(props, propName) { |
|
3338
|
|
|
if (props[propName] && !reactIs_1(props[propName])) { |
|
3339
|
|
|
return new Error("Invalid prop 'component' supplied to 'Route': the prop is not a valid React component"); |
|
3340
|
|
|
} |
|
3341
|
|
|
}, |
|
3342
|
|
|
exact: propTypes.bool, |
|
3343
|
|
|
location: propTypes.object, |
|
3344
|
|
|
path: propTypes.oneOfType([propTypes.string, propTypes.arrayOf(propTypes.string)]), |
|
3345
|
|
|
render: propTypes.func, |
|
3346
|
|
|
sensitive: propTypes.bool, |
|
3347
|
|
|
strict: propTypes.bool |
|
3348
|
|
|
}; |
|
3349
|
|
|
|
|
3350
|
|
|
Route.prototype.componentDidMount = function () { |
|
3351
|
|
|
warning(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.component), "You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored") ; |
|
3352
|
|
|
warning(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.render), "You should not use <Route render> and <Route children> in the same route; <Route render> will be ignored") ; |
|
3353
|
|
|
warning(!(this.props.component && this.props.render), "You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored") ; |
|
3354
|
|
|
}; |
|
3355
|
|
|
|
|
3356
|
|
|
Route.prototype.componentDidUpdate = function (prevProps) { |
|
3357
|
|
|
warning(!(this.props.location && !prevProps.location), '<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.') ; |
|
3358
|
|
|
warning(!(!this.props.location && prevProps.location), '<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.') ; |
|
3359
|
|
|
}; |
|
3360
|
|
|
} |
|
3361
|
|
|
|
|
3362
|
|
|
function addLeadingSlash$1(path) { |
|
3363
|
|
|
return path.charAt(0) === "/" ? path : "/" + path; |
|
3364
|
|
|
} |
|
3365
|
|
|
|
|
3366
|
|
|
function addBasename(basename, location) { |
|
3367
|
|
|
if (!basename) return location; |
|
3368
|
|
|
return _extends({}, location, { |
|
3369
|
|
|
pathname: addLeadingSlash$1(basename) + location.pathname |
|
3370
|
|
|
}); |
|
3371
|
|
|
} |
|
3372
|
|
|
|
|
3373
|
|
|
function stripBasename$1(basename, location) { |
|
3374
|
|
|
if (!basename) return location; |
|
3375
|
|
|
var base = addLeadingSlash$1(basename); |
|
3376
|
|
|
if (location.pathname.indexOf(base) !== 0) return location; |
|
3377
|
|
|
return _extends({}, location, { |
|
3378
|
|
|
pathname: location.pathname.substr(base.length) |
|
3379
|
|
|
}); |
|
3380
|
|
|
} |
|
3381
|
|
|
|
|
3382
|
|
|
function createURL(location) { |
|
3383
|
|
|
return typeof location === "string" ? location : createPath(location); |
|
3384
|
|
|
} |
|
3385
|
|
|
|
|
3386
|
|
|
function staticHandler(methodName) { |
|
3387
|
|
|
return function () { |
|
3388
|
|
|
invariant(false, "You cannot %s with <StaticRouter>") ; |
|
3389
|
|
|
}; |
|
3390
|
|
|
} |
|
3391
|
|
|
|
|
3392
|
|
|
function noop() {} |
|
3393
|
|
|
/** |
|
3394
|
|
|
* The public top-level API for a "static" <Router>, so-called because it |
|
3395
|
|
|
* can't actually change the current location. Instead, it just records |
|
3396
|
|
|
* location changes in a context object. Useful mainly in testing and |
|
3397
|
|
|
* server-rendering scenarios. |
|
3398
|
|
|
*/ |
|
3399
|
|
|
|
|
3400
|
|
|
|
|
3401
|
|
|
var StaticRouter = |
|
3402
|
|
|
/*#__PURE__*/ |
|
3403
|
|
|
function (_React$Component) { |
|
3404
|
|
|
_inheritsLoose(StaticRouter, _React$Component); |
|
3405
|
|
|
|
|
3406
|
|
|
function StaticRouter() { |
|
3407
|
|
|
var _this; |
|
3408
|
|
|
|
|
3409
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { |
|
3410
|
|
|
args[_key] = arguments[_key]; |
|
3411
|
|
|
} |
|
3412
|
|
|
|
|
3413
|
|
|
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; |
|
3414
|
|
|
|
|
3415
|
|
|
_this.handlePush = function (location) { |
|
3416
|
|
|
return _this.navigateTo(location, "PUSH"); |
|
3417
|
|
|
}; |
|
3418
|
|
|
|
|
3419
|
|
|
_this.handleReplace = function (location) { |
|
3420
|
|
|
return _this.navigateTo(location, "REPLACE"); |
|
3421
|
|
|
}; |
|
3422
|
|
|
|
|
3423
|
|
|
_this.handleListen = function () { |
|
3424
|
|
|
return noop; |
|
3425
|
|
|
}; |
|
3426
|
|
|
|
|
3427
|
|
|
_this.handleBlock = function () { |
|
3428
|
|
|
return noop; |
|
3429
|
|
|
}; |
|
3430
|
|
|
|
|
3431
|
|
|
return _this; |
|
3432
|
|
|
} |
|
3433
|
|
|
|
|
3434
|
|
|
var _proto = StaticRouter.prototype; |
|
3435
|
|
|
|
|
3436
|
|
|
_proto.navigateTo = function navigateTo(location, action) { |
|
3437
|
|
|
var _this$props = this.props, |
|
3438
|
|
|
_this$props$basename = _this$props.basename, |
|
3439
|
|
|
basename = _this$props$basename === void 0 ? "" : _this$props$basename, |
|
3440
|
|
|
_this$props$context = _this$props.context, |
|
3441
|
|
|
context = _this$props$context === void 0 ? {} : _this$props$context; |
|
3442
|
|
|
context.action = action; |
|
3443
|
|
|
context.location = addBasename(basename, createLocation(location)); |
|
3444
|
|
|
context.url = createURL(context.location); |
|
3445
|
|
|
}; |
|
3446
|
|
|
|
|
3447
|
|
|
_proto.render = function render() { |
|
3448
|
|
|
var _this$props2 = this.props, |
|
3449
|
|
|
_this$props2$basename = _this$props2.basename, |
|
3450
|
|
|
basename = _this$props2$basename === void 0 ? "" : _this$props2$basename, |
|
3451
|
|
|
_this$props2$context = _this$props2.context, |
|
3452
|
|
|
context = _this$props2$context === void 0 ? {} : _this$props2$context, |
|
3453
|
|
|
_this$props2$location = _this$props2.location, |
|
3454
|
|
|
location = _this$props2$location === void 0 ? "/" : _this$props2$location, |
|
3455
|
|
|
rest = _objectWithoutPropertiesLoose(_this$props2, ["basename", "context", "location"]); |
|
3456
|
|
|
|
|
3457
|
|
|
var history = { |
|
3458
|
|
|
createHref: function createHref(path) { |
|
3459
|
|
|
return addLeadingSlash$1(basename + createURL(path)); |
|
3460
|
|
|
}, |
|
3461
|
|
|
action: "POP", |
|
3462
|
|
|
location: stripBasename$1(basename, createLocation(location)), |
|
3463
|
|
|
push: this.handlePush, |
|
3464
|
|
|
replace: this.handleReplace, |
|
3465
|
|
|
go: staticHandler(), |
|
3466
|
|
|
goBack: staticHandler(), |
|
3467
|
|
|
goForward: staticHandler(), |
|
3468
|
|
|
listen: this.handleListen, |
|
3469
|
|
|
block: this.handleBlock |
|
3470
|
|
|
}; |
|
3471
|
|
|
return React__default.createElement(Router, _extends({}, rest, { |
|
3472
|
|
|
history: history, |
|
3473
|
|
|
staticContext: context |
|
3474
|
|
|
})); |
|
3475
|
|
|
}; |
|
3476
|
|
|
|
|
3477
|
|
|
return StaticRouter; |
|
3478
|
|
|
}(React__default.Component); |
|
3479
|
|
|
|
|
3480
|
|
|
{ |
|
3481
|
|
|
StaticRouter.propTypes = { |
|
3482
|
|
|
basename: propTypes.string, |
|
3483
|
|
|
context: propTypes.object, |
|
3484
|
|
|
location: propTypes.oneOfType([propTypes.string, propTypes.object]) |
|
3485
|
|
|
}; |
|
3486
|
|
|
|
|
3487
|
|
|
StaticRouter.prototype.componentDidMount = function () { |
|
3488
|
|
|
warning(!this.props.history, "<StaticRouter> ignores the history prop. To use a custom history, " + "use `import { Router }` instead of `import { StaticRouter as Router }`.") ; |
|
3489
|
|
|
}; |
|
3490
|
|
|
} |
|
3491
|
|
|
/** |
|
3492
|
|
|
* The public API for rendering the first <Route> that matches. |
|
3493
|
|
|
*/ |
|
3494
|
|
|
|
|
3495
|
|
|
|
|
3496
|
|
|
var Switch = |
|
3497
|
|
|
/*#__PURE__*/ |
|
3498
|
|
|
function (_React$Component) { |
|
3499
|
|
|
_inheritsLoose(Switch, _React$Component); |
|
3500
|
|
|
|
|
3501
|
|
|
function Switch() { |
|
3502
|
|
|
return _React$Component.apply(this, arguments) || this; |
|
3503
|
|
|
} |
|
3504
|
|
|
|
|
3505
|
|
|
var _proto = Switch.prototype; |
|
3506
|
|
|
|
|
3507
|
|
|
_proto.render = function render() { |
|
3508
|
|
|
var _this = this; |
|
3509
|
|
|
|
|
3510
|
|
|
return React__default.createElement(context.Consumer, null, function (context) { |
|
3511
|
|
|
!context ? invariant(false, "You should not use <Switch> outside a <Router>") : void 0; |
|
3512
|
|
|
var location = _this.props.location || context.location; |
|
3513
|
|
|
var element, match; // We use React.Children.forEach instead of React.Children.toArray().find() |
|
3514
|
|
|
// here because toArray adds keys to all child elements and we do not want |
|
3515
|
|
|
// to trigger an unmount/remount for two <Route>s that render the same |
|
3516
|
|
|
// component at different URLs. |
|
3517
|
|
|
|
|
3518
|
|
|
React__default.Children.forEach(_this.props.children, function (child) { |
|
3519
|
|
|
if (match == null && React__default.isValidElement(child)) { |
|
3520
|
|
|
element = child; |
|
3521
|
|
|
var path = child.props.path || child.props.from; |
|
3522
|
|
|
match = path ? matchPath(location.pathname, _extends({}, child.props, { |
|
3523
|
|
|
path: path |
|
3524
|
|
|
})) : context.match; |
|
3525
|
|
|
} |
|
3526
|
|
|
}); |
|
3527
|
|
|
return match ? React__default.cloneElement(element, { |
|
3528
|
|
|
location: location, |
|
3529
|
|
|
computedMatch: match |
|
3530
|
|
|
}) : null; |
|
3531
|
|
|
}); |
|
3532
|
|
|
}; |
|
3533
|
|
|
|
|
3534
|
|
|
return Switch; |
|
3535
|
|
|
}(React__default.Component); |
|
3536
|
|
|
|
|
3537
|
|
|
{ |
|
3538
|
|
|
Switch.propTypes = { |
|
3539
|
|
|
children: propTypes.node, |
|
3540
|
|
|
location: propTypes.object |
|
3541
|
|
|
}; |
|
3542
|
|
|
|
|
3543
|
|
|
Switch.prototype.componentDidUpdate = function (prevProps) { |
|
3544
|
|
|
warning(!(this.props.location && !prevProps.location), '<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.') ; |
|
3545
|
|
|
warning(!(!this.props.location && prevProps.location), '<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.') ; |
|
3546
|
|
|
}; |
|
3547
|
|
|
} |
|
3548
|
|
|
/** |
|
3549
|
|
|
* A public higher-order component to access the imperative API |
|
3550
|
|
|
*/ |
|
3551
|
|
|
|
|
3552
|
|
|
|
|
3553
|
|
|
function withRouter(Component) { |
|
3554
|
|
|
var displayName = "withRouter(" + (Component.displayName || Component.name) + ")"; |
|
3555
|
|
|
|
|
3556
|
|
|
var C = function C(props) { |
|
3557
|
|
|
var wrappedComponentRef = props.wrappedComponentRef, |
|
3558
|
|
|
remainingProps = _objectWithoutPropertiesLoose(props, ["wrappedComponentRef"]); |
|
3559
|
|
|
|
|
3560
|
|
|
return React__default.createElement(context.Consumer, null, function (context) { |
|
3561
|
|
|
!context ? invariant(false, "You should not use <" + displayName + " /> outside a <Router>") : void 0; |
|
3562
|
|
|
return React__default.createElement(Component, _extends({}, remainingProps, context, { |
|
3563
|
|
|
ref: wrappedComponentRef |
|
3564
|
|
|
})); |
|
3565
|
|
|
}); |
|
3566
|
|
|
}; |
|
3567
|
|
|
|
|
3568
|
|
|
C.displayName = displayName; |
|
3569
|
|
|
C.WrappedComponent = Component; |
|
3570
|
|
|
|
|
3571
|
|
|
{ |
|
3572
|
|
|
C.propTypes = { |
|
3573
|
|
|
wrappedComponentRef: propTypes.oneOfType([propTypes.string, propTypes.func, propTypes.object]) |
|
3574
|
|
|
}; |
|
3575
|
|
|
} |
|
3576
|
|
|
|
|
3577
|
|
|
return hoistNonReactStatics_cjs(C, Component); |
|
3578
|
|
|
} |
|
3579
|
|
|
|
|
3580
|
|
|
var useContext = React__default.useContext; |
|
3581
|
|
|
|
|
3582
|
|
|
function useHistory() { |
|
3583
|
|
|
{ |
|
3584
|
|
|
!(typeof useContext === "function") ? invariant(false, "You must use React >= 16.8 in order to use useHistory()") : void 0; |
|
3585
|
|
|
} |
|
3586
|
|
|
|
|
3587
|
|
|
return useContext(context).history; |
|
3588
|
|
|
} |
|
3589
|
|
|
|
|
3590
|
|
|
function useLocation() { |
|
3591
|
|
|
{ |
|
3592
|
|
|
!(typeof useContext === "function") ? invariant(false, "You must use React >= 16.8 in order to use useLocation()") : void 0; |
|
3593
|
|
|
} |
|
3594
|
|
|
|
|
3595
|
|
|
return useContext(context).location; |
|
3596
|
|
|
} |
|
3597
|
|
|
|
|
3598
|
|
|
function useParams() { |
|
3599
|
|
|
{ |
|
3600
|
|
|
!(typeof useContext === "function") ? invariant(false, "You must use React >= 16.8 in order to use useParams()") : void 0; |
|
3601
|
|
|
} |
|
3602
|
|
|
|
|
3603
|
|
|
var match = useContext(context).match; |
|
3604
|
|
|
return match ? match.params : {}; |
|
3605
|
|
|
} |
|
3606
|
|
|
|
|
3607
|
|
|
function useRouteMatch(path) { |
|
3608
|
|
|
{ |
|
3609
|
|
|
!(typeof useContext === "function") ? invariant(false, "You must use React >= 16.8 in order to use useRouteMatch()") : void 0; |
|
3610
|
|
|
} |
|
3611
|
|
|
|
|
3612
|
|
|
return path ? matchPath(useLocation().pathname, path) : useContext(context).match; |
|
3613
|
|
|
} |
|
3614
|
|
|
|
|
3615
|
|
|
{ |
|
3616
|
|
|
if (typeof window !== "undefined") { |
|
3617
|
|
|
var global$1 = window; |
|
3618
|
|
|
var key$1 = "__react_router_build__"; |
|
3619
|
|
|
var buildNames = { |
|
3620
|
|
|
cjs: "CommonJS", |
|
3621
|
|
|
esm: "ES modules", |
|
3622
|
|
|
umd: "UMD" |
|
3623
|
|
|
}; |
|
3624
|
|
|
|
|
3625
|
|
|
if (global$1[key$1] && global$1[key$1] !== "esm") { |
|
3626
|
|
|
var initialBuildName = buildNames[global$1[key$1]]; |
|
3627
|
|
|
var secondaryBuildName = buildNames["esm"]; // TODO: Add link to article that explains in detail how to avoid |
|
3628
|
|
|
// loading 2 different builds. |
|
3629
|
|
|
|
|
3630
|
|
|
throw new Error("You are loading the " + secondaryBuildName + " build of React Router " + ("on a page that is already running the " + initialBuildName + " ") + "build, so things won't work right."); |
|
3631
|
|
|
} |
|
3632
|
|
|
|
|
3633
|
|
|
global$1[key$1] = "esm"; |
|
3634
|
|
|
} |
|
3635
|
|
|
} |
|
3636
|
|
|
|
|
3637
|
|
|
/** |
|
3638
|
|
|
* The public API for a <Router> that uses HTML5 history. |
|
3639
|
|
|
*/ |
|
3640
|
|
|
|
|
3641
|
|
|
var BrowserRouter = |
|
3642
|
|
|
/*#__PURE__*/ |
|
3643
|
|
|
function (_React$Component) { |
|
3644
|
|
|
_inheritsLoose(BrowserRouter, _React$Component); |
|
3645
|
|
|
|
|
3646
|
|
|
function BrowserRouter() { |
|
3647
|
|
|
var _this; |
|
3648
|
|
|
|
|
3649
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { |
|
3650
|
|
|
args[_key] = arguments[_key]; |
|
3651
|
|
|
} |
|
3652
|
|
|
|
|
3653
|
|
|
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; |
|
3654
|
|
|
_this.history = createBrowserHistory(_this.props); |
|
3655
|
|
|
return _this; |
|
3656
|
|
|
} |
|
3657
|
|
|
|
|
3658
|
|
|
var _proto = BrowserRouter.prototype; |
|
3659
|
|
|
|
|
3660
|
|
|
_proto.render = function render() { |
|
3661
|
|
|
return React__default.createElement(Router, { |
|
3662
|
|
|
history: this.history, |
|
3663
|
|
|
children: this.props.children |
|
3664
|
|
|
}); |
|
3665
|
|
|
}; |
|
3666
|
|
|
|
|
3667
|
|
|
return BrowserRouter; |
|
3668
|
|
|
}(React__default.Component); |
|
3669
|
|
|
|
|
3670
|
|
|
{ |
|
3671
|
|
|
BrowserRouter.propTypes = { |
|
3672
|
|
|
basename: propTypes.string, |
|
3673
|
|
|
children: propTypes.node, |
|
3674
|
|
|
forceRefresh: propTypes.bool, |
|
3675
|
|
|
getUserConfirmation: propTypes.func, |
|
3676
|
|
|
keyLength: propTypes.number |
|
3677
|
|
|
}; |
|
3678
|
|
|
|
|
3679
|
|
|
BrowserRouter.prototype.componentDidMount = function () { |
|
3680
|
|
|
warning(!this.props.history, "<BrowserRouter> ignores the history prop. To use a custom history, " + "use `import { Router }` instead of `import { BrowserRouter as Router }`.") ; |
|
3681
|
|
|
}; |
|
3682
|
|
|
} |
|
3683
|
|
|
|
|
3684
|
|
|
/** |
|
3685
|
|
|
* The public API for a <Router> that uses window.location.hash. |
|
3686
|
|
|
*/ |
|
3687
|
|
|
|
|
3688
|
|
|
var HashRouter = |
|
3689
|
|
|
/*#__PURE__*/ |
|
3690
|
|
|
function (_React$Component) { |
|
3691
|
|
|
_inheritsLoose(HashRouter, _React$Component); |
|
3692
|
|
|
|
|
3693
|
|
|
function HashRouter() { |
|
3694
|
|
|
var _this; |
|
3695
|
|
|
|
|
3696
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { |
|
3697
|
|
|
args[_key] = arguments[_key]; |
|
3698
|
|
|
} |
|
3699
|
|
|
|
|
3700
|
|
|
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; |
|
3701
|
|
|
_this.history = createHashHistory(_this.props); |
|
3702
|
|
|
return _this; |
|
3703
|
|
|
} |
|
3704
|
|
|
|
|
3705
|
|
|
var _proto = HashRouter.prototype; |
|
3706
|
|
|
|
|
3707
|
|
|
_proto.render = function render() { |
|
3708
|
|
|
return React__default.createElement(Router, { |
|
3709
|
|
|
history: this.history, |
|
3710
|
|
|
children: this.props.children |
|
3711
|
|
|
}); |
|
3712
|
|
|
}; |
|
3713
|
|
|
|
|
3714
|
|
|
return HashRouter; |
|
3715
|
|
|
}(React__default.Component); |
|
3716
|
|
|
|
|
3717
|
|
|
{ |
|
3718
|
|
|
HashRouter.propTypes = { |
|
3719
|
|
|
basename: propTypes.string, |
|
3720
|
|
|
children: propTypes.node, |
|
3721
|
|
|
getUserConfirmation: propTypes.func, |
|
3722
|
|
|
hashType: propTypes.oneOf(["hashbang", "noslash", "slash"]) |
|
3723
|
|
|
}; |
|
3724
|
|
|
|
|
3725
|
|
|
HashRouter.prototype.componentDidMount = function () { |
|
3726
|
|
|
warning(!this.props.history, "<HashRouter> ignores the history prop. To use a custom history, " + "use `import { Router }` instead of `import { HashRouter as Router }`.") ; |
|
3727
|
|
|
}; |
|
3728
|
|
|
} |
|
3729
|
|
|
|
|
3730
|
|
|
var resolveToLocation = function resolveToLocation(to, currentLocation) { |
|
3731
|
|
|
return typeof to === "function" ? to(currentLocation) : to; |
|
3732
|
|
|
}; |
|
3733
|
|
|
var normalizeToLocation = function normalizeToLocation(to, currentLocation) { |
|
3734
|
|
|
return typeof to === "string" ? createLocation(to, null, null, currentLocation) : to; |
|
3735
|
|
|
}; |
|
3736
|
|
|
|
|
3737
|
|
|
var forwardRefShim = function forwardRefShim(C) { |
|
3738
|
|
|
return C; |
|
3739
|
|
|
}; |
|
3740
|
|
|
|
|
3741
|
|
|
var forwardRef = React__default.forwardRef; |
|
3742
|
|
|
|
|
3743
|
|
|
if (typeof forwardRef === "undefined") { |
|
3744
|
|
|
forwardRef = forwardRefShim; |
|
3745
|
|
|
} |
|
3746
|
|
|
|
|
3747
|
|
|
function isModifiedEvent(event) { |
|
3748
|
|
|
return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey); |
|
3749
|
|
|
} |
|
3750
|
|
|
|
|
3751
|
|
|
var LinkAnchor = forwardRef(function (_ref, forwardedRef) { |
|
3752
|
|
|
var innerRef = _ref.innerRef, |
|
3753
|
|
|
navigate = _ref.navigate, |
|
3754
|
|
|
_onClick = _ref.onClick, |
|
3755
|
|
|
rest = _objectWithoutPropertiesLoose(_ref, ["innerRef", "navigate", "onClick"]); |
|
3756
|
|
|
|
|
3757
|
|
|
var target = rest.target; |
|
3758
|
|
|
|
|
3759
|
|
|
var props = _extends({}, rest, { |
|
3760
|
|
|
onClick: function onClick(event) { |
|
3761
|
|
|
try { |
|
3762
|
|
|
if (_onClick) _onClick(event); |
|
3763
|
|
|
} catch (ex) { |
|
3764
|
|
|
event.preventDefault(); |
|
3765
|
|
|
throw ex; |
|
3766
|
|
|
} |
|
3767
|
|
|
|
|
3768
|
|
|
if (!event.defaultPrevented && // onClick prevented default |
|
3769
|
|
|
event.button === 0 && ( // ignore everything but left clicks |
|
3770
|
|
|
!target || target === "_self") && // let browser handle "target=_blank" etc. |
|
3771
|
|
|
!isModifiedEvent(event) // ignore clicks with modifier keys |
|
3772
|
|
|
) { |
|
3773
|
|
|
event.preventDefault(); |
|
3774
|
|
|
navigate(); |
|
3775
|
|
|
} |
|
3776
|
|
|
} |
|
3777
|
|
|
}); // React 15 compat |
|
3778
|
|
|
|
|
3779
|
|
|
|
|
3780
|
|
|
if (forwardRefShim !== forwardRef) { |
|
3781
|
|
|
props.ref = forwardedRef || innerRef; |
|
3782
|
|
|
} else { |
|
3783
|
|
|
props.ref = innerRef; |
|
3784
|
|
|
} |
|
3785
|
|
|
|
|
3786
|
|
|
return React__default.createElement("a", props); |
|
3787
|
|
|
}); |
|
3788
|
|
|
|
|
3789
|
|
|
{ |
|
3790
|
|
|
LinkAnchor.displayName = "LinkAnchor"; |
|
3791
|
|
|
} |
|
3792
|
|
|
/** |
|
3793
|
|
|
* The public API for rendering a history-aware <a>. |
|
3794
|
|
|
*/ |
|
3795
|
|
|
|
|
3796
|
|
|
|
|
3797
|
|
|
var Link = forwardRef(function (_ref2, forwardedRef) { |
|
3798
|
|
|
var _ref2$component = _ref2.component, |
|
3799
|
|
|
component = _ref2$component === void 0 ? LinkAnchor : _ref2$component, |
|
3800
|
|
|
replace = _ref2.replace, |
|
3801
|
|
|
to = _ref2.to, |
|
3802
|
|
|
innerRef = _ref2.innerRef, |
|
3803
|
|
|
rest = _objectWithoutPropertiesLoose(_ref2, ["component", "replace", "to", "innerRef"]); |
|
3804
|
|
|
|
|
3805
|
|
|
return React__default.createElement(context.Consumer, null, function (context) { |
|
3806
|
|
|
!context ? invariant(false, "You should not use <Link> outside a <Router>") : void 0; |
|
3807
|
|
|
var history = context.history; |
|
3808
|
|
|
var location = normalizeToLocation(resolveToLocation(to, context.location), context.location); |
|
3809
|
|
|
var href = location ? history.createHref(location) : ""; |
|
3810
|
|
|
|
|
3811
|
|
|
var props = _extends({}, rest, { |
|
3812
|
|
|
href: href, |
|
3813
|
|
|
navigate: function navigate() { |
|
3814
|
|
|
var location = resolveToLocation(to, context.location); |
|
3815
|
|
|
var method = replace ? history.replace : history.push; |
|
3816
|
|
|
method(location); |
|
3817
|
|
|
} |
|
3818
|
|
|
}); // React 15 compat |
|
3819
|
|
|
|
|
3820
|
|
|
|
|
3821
|
|
|
if (forwardRefShim !== forwardRef) { |
|
3822
|
|
|
props.ref = forwardedRef || innerRef; |
|
3823
|
|
|
} else { |
|
3824
|
|
|
props.innerRef = innerRef; |
|
3825
|
|
|
} |
|
3826
|
|
|
|
|
3827
|
|
|
return React__default.createElement(component, props); |
|
3828
|
|
|
}); |
|
3829
|
|
|
}); |
|
3830
|
|
|
|
|
3831
|
|
|
{ |
|
3832
|
|
|
var toType = propTypes.oneOfType([propTypes.string, propTypes.object, propTypes.func]); |
|
3833
|
|
|
var refType = propTypes.oneOfType([propTypes.string, propTypes.func, propTypes.shape({ |
|
3834
|
|
|
current: propTypes.any |
|
3835
|
|
|
})]); |
|
3836
|
|
|
Link.displayName = "Link"; |
|
3837
|
|
|
Link.propTypes = { |
|
3838
|
|
|
innerRef: refType, |
|
3839
|
|
|
onClick: propTypes.func, |
|
3840
|
|
|
replace: propTypes.bool, |
|
3841
|
|
|
target: propTypes.string, |
|
3842
|
|
|
to: toType.isRequired |
|
3843
|
|
|
}; |
|
3844
|
|
|
} |
|
3845
|
|
|
|
|
3846
|
|
|
var forwardRefShim$1 = function forwardRefShim(C) { |
|
3847
|
|
|
return C; |
|
3848
|
|
|
}; |
|
3849
|
|
|
|
|
3850
|
|
|
var forwardRef$1 = React__default.forwardRef; |
|
3851
|
|
|
|
|
3852
|
|
|
if (typeof forwardRef$1 === "undefined") { |
|
3853
|
|
|
forwardRef$1 = forwardRefShim$1; |
|
3854
|
|
|
} |
|
3855
|
|
|
|
|
3856
|
|
|
function joinClassnames() { |
|
3857
|
|
|
for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) { |
|
3858
|
|
|
classnames[_key] = arguments[_key]; |
|
3859
|
|
|
} |
|
3860
|
|
|
|
|
3861
|
|
|
return classnames.filter(function (i) { |
|
3862
|
|
|
return i; |
|
3863
|
|
|
}).join(" "); |
|
3864
|
|
|
} |
|
3865
|
|
|
/** |
|
3866
|
|
|
* A <Link> wrapper that knows if it's "active" or not. |
|
3867
|
|
|
*/ |
|
3868
|
|
|
|
|
3869
|
|
|
|
|
3870
|
|
|
var NavLink = forwardRef$1(function (_ref, forwardedRef) { |
|
3871
|
|
|
var _ref$ariaCurrent = _ref["aria-current"], |
|
3872
|
|
|
ariaCurrent = _ref$ariaCurrent === void 0 ? "page" : _ref$ariaCurrent, |
|
3873
|
|
|
_ref$activeClassName = _ref.activeClassName, |
|
3874
|
|
|
activeClassName = _ref$activeClassName === void 0 ? "active" : _ref$activeClassName, |
|
3875
|
|
|
activeStyle = _ref.activeStyle, |
|
3876
|
|
|
classNameProp = _ref.className, |
|
3877
|
|
|
exact = _ref.exact, |
|
3878
|
|
|
isActiveProp = _ref.isActive, |
|
3879
|
|
|
locationProp = _ref.location, |
|
3880
|
|
|
strict = _ref.strict, |
|
3881
|
|
|
styleProp = _ref.style, |
|
3882
|
|
|
to = _ref.to, |
|
3883
|
|
|
innerRef = _ref.innerRef, |
|
3884
|
|
|
rest = _objectWithoutPropertiesLoose(_ref, ["aria-current", "activeClassName", "activeStyle", "className", "exact", "isActive", "location", "strict", "style", "to", "innerRef"]); |
|
3885
|
|
|
|
|
3886
|
|
|
return React__default.createElement(context.Consumer, null, function (context) { |
|
3887
|
|
|
!context ? invariant(false, "You should not use <NavLink> outside a <Router>") : void 0; |
|
3888
|
|
|
var currentLocation = locationProp || context.location; |
|
3889
|
|
|
var toLocation = normalizeToLocation(resolveToLocation(to, currentLocation), currentLocation); |
|
3890
|
|
|
var path = toLocation.pathname; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202 |
|
3891
|
|
|
|
|
3892
|
|
|
var escapedPath = path && path.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); |
|
3893
|
|
|
var match = escapedPath ? matchPath(currentLocation.pathname, { |
|
3894
|
|
|
path: escapedPath, |
|
3895
|
|
|
exact: exact, |
|
3896
|
|
|
strict: strict |
|
3897
|
|
|
}) : null; |
|
3898
|
|
|
var isActive = !!(isActiveProp ? isActiveProp(match, currentLocation) : match); |
|
3899
|
|
|
var className = isActive ? joinClassnames(classNameProp, activeClassName) : classNameProp; |
|
3900
|
|
|
var style = isActive ? _extends({}, styleProp, {}, activeStyle) : styleProp; |
|
3901
|
|
|
|
|
3902
|
|
|
var props = _extends({ |
|
3903
|
|
|
"aria-current": isActive && ariaCurrent || null, |
|
3904
|
|
|
className: className, |
|
3905
|
|
|
style: style, |
|
3906
|
|
|
to: toLocation |
|
3907
|
|
|
}, rest); // React 15 compat |
|
3908
|
|
|
|
|
3909
|
|
|
|
|
3910
|
|
|
if (forwardRefShim$1 !== forwardRef$1) { |
|
3911
|
|
|
props.ref = forwardedRef || innerRef; |
|
3912
|
|
|
} else { |
|
3913
|
|
|
props.innerRef = innerRef; |
|
3914
|
|
|
} |
|
3915
|
|
|
|
|
3916
|
|
|
return React__default.createElement(Link, props); |
|
3917
|
|
|
}); |
|
3918
|
|
|
}); |
|
3919
|
|
|
|
|
3920
|
|
|
{ |
|
3921
|
|
|
NavLink.displayName = "NavLink"; |
|
3922
|
|
|
var ariaCurrentType = propTypes.oneOf(["page", "step", "location", "date", "time", "true"]); |
|
3923
|
|
|
NavLink.propTypes = _extends({}, Link.propTypes, { |
|
3924
|
|
|
"aria-current": ariaCurrentType, |
|
3925
|
|
|
activeClassName: propTypes.string, |
|
3926
|
|
|
activeStyle: propTypes.object, |
|
3927
|
|
|
className: propTypes.string, |
|
3928
|
|
|
exact: propTypes.bool, |
|
3929
|
|
|
isActive: propTypes.func, |
|
3930
|
|
|
location: propTypes.object, |
|
3931
|
|
|
strict: propTypes.bool, |
|
3932
|
|
|
style: propTypes.object |
|
3933
|
|
|
}); |
|
3934
|
|
|
} |
|
3935
|
|
|
|
|
3936
|
|
|
exports.BrowserRouter = BrowserRouter; |
|
3937
|
|
|
exports.HashRouter = HashRouter; |
|
3938
|
|
|
exports.Link = Link; |
|
3939
|
|
|
exports.MemoryRouter = MemoryRouter; |
|
3940
|
|
|
exports.NavLink = NavLink; |
|
3941
|
|
|
exports.Prompt = Prompt; |
|
3942
|
|
|
exports.Redirect = Redirect; |
|
3943
|
|
|
exports.Route = Route; |
|
3944
|
|
|
exports.Router = Router; |
|
3945
|
|
|
exports.StaticRouter = StaticRouter; |
|
3946
|
|
|
exports.Switch = Switch; |
|
3947
|
|
|
exports.__RouterContext = context; |
|
3948
|
|
|
exports.generatePath = generatePath; |
|
3949
|
|
|
exports.matchPath = matchPath; |
|
3950
|
|
|
exports.useHistory = useHistory; |
|
3951
|
|
|
exports.useLocation = useLocation; |
|
3952
|
|
|
exports.useParams = useParams; |
|
3953
|
|
|
exports.useRouteMatch = useRouteMatch; |
|
3954
|
|
|
exports.withRouter = withRouter; |
|
3955
|
|
|
|
|
3956
|
|
|
Object.defineProperty(exports, '__esModule', { value: true }); |
|
3957
|
|
|
|
|
3958
|
|
|
})); |
|
3959
|
|
|
//# sourceMappingURL=react-router-dom.js.map |
|
3960
|
|
|
|