@zohodesk/react-cli 0.0.1-exp.161.2 → 0.0.1-exp.161.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -48
- package/lib/common/index.js +6 -6
- package/lib/loaderUtils/index.js +4 -4
- package/lib/pluginUtils/getDevPlugins.js +0 -2
- package/lib/pluginUtils/getProdPlugins.js +0 -2
- package/lib/pluginUtils/index.js +12 -12
- package/lib/plugins/EFCPlugin.js +13 -43
- package/lib/plugins/I18nSplitPlugin/utils/hashUtils.js +2 -2
- package/lib/plugins/I18nSplitPlugin/utils/propertiesUtils.js +1 -1
- package/lib/plugins/ManifestPlugin.js +0 -8
- package/lib/plugins/index.js +36 -36
- package/lib/postcss-plugins/RTLSplitPlugin.js +1 -1
- package/lib/schemas/index.js +0 -3
- package/lib/templates/linterConstant.js +1 -1
- package/lib/utils/cssClassNameGenerate.js +2 -9
- package/lib/utils/cssURLReplacer.js +1 -1
- package/lib/utils/index.js +19 -21
- package/lib/utils/jsonHelper.js +1 -1
- package/lib/utils/reinstallDependencies.js +1 -1
- package/package.json +4 -5
- package/lib/plugins/EFCTemplatePlugin.js +0 -151
- package/node_modules0/history/CHANGES.md +0 -395
- package/node_modules0/history/DOMUtils.js +0 -3
- package/node_modules0/history/ExecutionEnvironment.js +0 -3
- package/node_modules0/history/LICENSE +0 -21
- package/node_modules0/history/LocationUtils.js +0 -3
- package/node_modules0/history/PathUtils.js +0 -3
- package/node_modules0/history/README.md +0 -282
- package/node_modules0/history/cjs/history.js +0 -933
- package/node_modules0/history/cjs/history.min.js +0 -1
- package/node_modules0/history/createBrowserHistory.js +0 -3
- package/node_modules0/history/createHashHistory.js +0 -3
- package/node_modules0/history/createMemoryHistory.js +0 -3
- package/node_modules0/history/createTransitionManager.js +0 -3
- package/node_modules0/history/es/DOMUtils.js +0 -7
- package/node_modules0/history/es/ExecutionEnvironment.js +0 -7
- package/node_modules0/history/es/LocationUtils.js +0 -7
- package/node_modules0/history/es/PathUtils.js +0 -7
- package/node_modules0/history/es/createBrowserHistory.js +0 -7
- package/node_modules0/history/es/createHashHistory.js +0 -7
- package/node_modules0/history/es/createMemoryHistory.js +0 -7
- package/node_modules0/history/es/createTransitionManager.js +0 -7
- package/node_modules0/history/es/warnAboutDeprecatedESMImport.js +0 -35
- package/node_modules0/history/esm/history.js +0 -904
- package/node_modules0/history/index.js +0 -7
- package/node_modules0/history/package.json +0 -120
- package/node_modules0/history/umd/history.js +0 -1059
- package/node_modules0/history/umd/history.min.js +0 -1
- package/node_modules0/history/warnAboutDeprecatedCJSRequire.js +0 -35
@@ -1,904 +0,0 @@
|
|
1
|
-
import _extends from '@babel/runtime/helpers/esm/extends';
|
2
|
-
import resolvePathname from 'resolve-pathname';
|
3
|
-
import valueEqual from 'value-equal';
|
4
|
-
import warning from 'tiny-warning';
|
5
|
-
import invariant from 'tiny-invariant';
|
6
|
-
|
7
|
-
function addLeadingSlash(path) {
|
8
|
-
return path.charAt(0) === '/' ? path : '/' + path;
|
9
|
-
}
|
10
|
-
function stripLeadingSlash(path) {
|
11
|
-
return path.charAt(0) === '/' ? path.substr(1) : path;
|
12
|
-
}
|
13
|
-
function hasBasename(path, prefix) {
|
14
|
-
return new RegExp('^' + prefix + '(\\/|\\?|#|$)', 'i').test(path);
|
15
|
-
}
|
16
|
-
function stripBasename(path, prefix) {
|
17
|
-
return hasBasename(path, prefix) ? path.substr(prefix.length) : path;
|
18
|
-
}
|
19
|
-
function stripTrailingSlash(path) {
|
20
|
-
return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;
|
21
|
-
}
|
22
|
-
function parsePath(path) {
|
23
|
-
var pathname = path || '/';
|
24
|
-
var search = '';
|
25
|
-
var hash = '';
|
26
|
-
var hashIndex = pathname.indexOf('#');
|
27
|
-
|
28
|
-
if (hashIndex !== -1) {
|
29
|
-
hash = pathname.substr(hashIndex);
|
30
|
-
pathname = pathname.substr(0, hashIndex);
|
31
|
-
}
|
32
|
-
|
33
|
-
var searchIndex = pathname.indexOf('?');
|
34
|
-
|
35
|
-
if (searchIndex !== -1) {
|
36
|
-
search = pathname.substr(searchIndex);
|
37
|
-
pathname = pathname.substr(0, searchIndex);
|
38
|
-
}
|
39
|
-
|
40
|
-
return {
|
41
|
-
pathname: pathname,
|
42
|
-
search: search === '?' ? '' : search,
|
43
|
-
hash: hash === '#' ? '' : hash
|
44
|
-
};
|
45
|
-
}
|
46
|
-
function createPath(location) {
|
47
|
-
var pathname = location.pathname,
|
48
|
-
search = location.search,
|
49
|
-
hash = location.hash;
|
50
|
-
var path = pathname || '/';
|
51
|
-
if (search && search !== '?') path += search.charAt(0) === '?' ? search : "?" + search;
|
52
|
-
if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : "#" + hash;
|
53
|
-
return path;
|
54
|
-
}
|
55
|
-
|
56
|
-
function createLocation(path, state, key, currentLocation) {
|
57
|
-
var location;
|
58
|
-
|
59
|
-
if (typeof path === 'string') {
|
60
|
-
// Two-arg form: push(path, state)
|
61
|
-
location = parsePath(path);
|
62
|
-
location.state = state;
|
63
|
-
} else {
|
64
|
-
// One-arg form: push(location)
|
65
|
-
location = _extends({}, path);
|
66
|
-
if (location.pathname === undefined) location.pathname = '';
|
67
|
-
|
68
|
-
if (location.search) {
|
69
|
-
if (location.search.charAt(0) !== '?') location.search = '?' + location.search;
|
70
|
-
} else {
|
71
|
-
location.search = '';
|
72
|
-
}
|
73
|
-
|
74
|
-
if (location.hash) {
|
75
|
-
if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;
|
76
|
-
} else {
|
77
|
-
location.hash = '';
|
78
|
-
}
|
79
|
-
|
80
|
-
if (state !== undefined && location.state === undefined) location.state = state;
|
81
|
-
}
|
82
|
-
|
83
|
-
try {
|
84
|
-
location.pathname = decodeURI(location.pathname);
|
85
|
-
} catch (e) {
|
86
|
-
if (e instanceof URIError) {
|
87
|
-
throw new URIError('Pathname "' + location.pathname + '" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');
|
88
|
-
} else {
|
89
|
-
throw e;
|
90
|
-
}
|
91
|
-
}
|
92
|
-
|
93
|
-
if (key) location.key = key;
|
94
|
-
|
95
|
-
if (currentLocation) {
|
96
|
-
// Resolve incomplete/relative pathname relative to current location.
|
97
|
-
if (!location.pathname) {
|
98
|
-
location.pathname = currentLocation.pathname;
|
99
|
-
} else if (location.pathname.charAt(0) !== '/') {
|
100
|
-
location.pathname = resolvePathname(location.pathname, currentLocation.pathname);
|
101
|
-
}
|
102
|
-
} else {
|
103
|
-
// When there is no prior location and pathname is empty, set it to /
|
104
|
-
if (!location.pathname) {
|
105
|
-
location.pathname = '/';
|
106
|
-
}
|
107
|
-
}
|
108
|
-
|
109
|
-
return location;
|
110
|
-
}
|
111
|
-
function locationsAreEqual(a, b) {
|
112
|
-
return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);
|
113
|
-
}
|
114
|
-
|
115
|
-
function createTransitionManager() {
|
116
|
-
var prompt = null;
|
117
|
-
|
118
|
-
function setPrompt(nextPrompt) {
|
119
|
-
process.env.NODE_ENV !== "production" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;
|
120
|
-
prompt = nextPrompt;
|
121
|
-
return function () {
|
122
|
-
if (prompt === nextPrompt) prompt = null;
|
123
|
-
};
|
124
|
-
}
|
125
|
-
|
126
|
-
function confirmTransitionTo(location, action, getUserConfirmation, callback) {
|
127
|
-
// TODO: If another transition starts while we're still confirming
|
128
|
-
// the previous one, we may end up in a weird state. Figure out the
|
129
|
-
// best way to handle this.
|
130
|
-
if (prompt != null) {
|
131
|
-
var result = typeof prompt === 'function' ? prompt(location, action) : prompt;
|
132
|
-
|
133
|
-
if (typeof result === 'string') {
|
134
|
-
if (typeof getUserConfirmation === 'function') {
|
135
|
-
getUserConfirmation(result, callback);
|
136
|
-
} else {
|
137
|
-
process.env.NODE_ENV !== "production" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;
|
138
|
-
callback(true);
|
139
|
-
}
|
140
|
-
} else {
|
141
|
-
// Return false from a transition hook to cancel the transition.
|
142
|
-
callback(result !== false);
|
143
|
-
}
|
144
|
-
} else {
|
145
|
-
callback(true);
|
146
|
-
}
|
147
|
-
}
|
148
|
-
|
149
|
-
var listeners = [];
|
150
|
-
|
151
|
-
function appendListener(fn) {
|
152
|
-
var isActive = true;
|
153
|
-
|
154
|
-
function listener() {
|
155
|
-
if (isActive) fn.apply(void 0, arguments);
|
156
|
-
}
|
157
|
-
|
158
|
-
listeners.push(listener);
|
159
|
-
return function () {
|
160
|
-
isActive = false;
|
161
|
-
listeners = listeners.filter(function (item) {
|
162
|
-
return item !== listener;
|
163
|
-
});
|
164
|
-
};
|
165
|
-
}
|
166
|
-
|
167
|
-
function notifyListeners() {
|
168
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
169
|
-
args[_key] = arguments[_key];
|
170
|
-
}
|
171
|
-
|
172
|
-
listeners.forEach(function (listener) {
|
173
|
-
return listener.apply(void 0, args);
|
174
|
-
});
|
175
|
-
}
|
176
|
-
|
177
|
-
return {
|
178
|
-
setPrompt: setPrompt,
|
179
|
-
confirmTransitionTo: confirmTransitionTo,
|
180
|
-
appendListener: appendListener,
|
181
|
-
notifyListeners: notifyListeners
|
182
|
-
};
|
183
|
-
}
|
184
|
-
|
185
|
-
var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
|
186
|
-
function getConfirmation(message, callback) {
|
187
|
-
callback(window.confirm(message)); // eslint-disable-line no-alert
|
188
|
-
}
|
189
|
-
/**
|
190
|
-
* Returns true if the HTML5 history API is supported. Taken from Modernizr.
|
191
|
-
*
|
192
|
-
* https://github.com/Modernizr/Modernizr/blob/master/LICENSE
|
193
|
-
* https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js
|
194
|
-
* changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586
|
195
|
-
*/
|
196
|
-
|
197
|
-
function supportsHistory() {
|
198
|
-
var ua = window.navigator.userAgent;
|
199
|
-
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;
|
200
|
-
return window.history && 'pushState' in window.history;
|
201
|
-
}
|
202
|
-
/**
|
203
|
-
* Returns true if browser fires popstate on hash change.
|
204
|
-
* IE10 and IE11 do not.
|
205
|
-
*/
|
206
|
-
|
207
|
-
function supportsPopStateOnHashChange() {
|
208
|
-
return window.navigator.userAgent.indexOf('Trident') === -1;
|
209
|
-
}
|
210
|
-
/**
|
211
|
-
* Returns false if using go(n) with hash history causes a full page reload.
|
212
|
-
*/
|
213
|
-
|
214
|
-
function supportsGoWithoutReloadUsingHash() {
|
215
|
-
return window.navigator.userAgent.indexOf('Firefox') === -1;
|
216
|
-
}
|
217
|
-
/**
|
218
|
-
* Returns true if a given popstate event is an extraneous WebKit event.
|
219
|
-
* Accounts for the fact that Chrome on iOS fires real popstate events
|
220
|
-
* containing undefined state when pressing the back button.
|
221
|
-
*/
|
222
|
-
|
223
|
-
function isExtraneousPopstateEvent(event) {
|
224
|
-
event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;
|
225
|
-
}
|
226
|
-
|
227
|
-
var PopStateEvent = 'popstate';
|
228
|
-
var HashChangeEvent = 'hashchange';
|
229
|
-
|
230
|
-
function getHistoryState() {
|
231
|
-
try {
|
232
|
-
return window.history.state || {};
|
233
|
-
} catch (e) {
|
234
|
-
// IE 11 sometimes throws when accessing window.history.state
|
235
|
-
// See https://github.com/ReactTraining/history/pull/289
|
236
|
-
return {};
|
237
|
-
}
|
238
|
-
}
|
239
|
-
/**
|
240
|
-
* Creates a history object that uses the HTML5 history API including
|
241
|
-
* pushState, replaceState, and the popstate event.
|
242
|
-
*/
|
243
|
-
|
244
|
-
|
245
|
-
function createBrowserHistory(props) {
|
246
|
-
if (props === void 0) {
|
247
|
-
props = {};
|
248
|
-
}
|
249
|
-
|
250
|
-
!canUseDOM ? process.env.NODE_ENV !== "production" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;
|
251
|
-
var globalHistory = window.history;
|
252
|
-
var canUseHistory = supportsHistory();
|
253
|
-
var needsHashChangeListener = !supportsPopStateOnHashChange();
|
254
|
-
var _props = props,
|
255
|
-
_props$forceRefresh = _props.forceRefresh,
|
256
|
-
forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,
|
257
|
-
_props$getUserConfirm = _props.getUserConfirmation,
|
258
|
-
getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,
|
259
|
-
_props$keyLength = _props.keyLength,
|
260
|
-
keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;
|
261
|
-
var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';
|
262
|
-
|
263
|
-
function getDOMLocation(historyState) {
|
264
|
-
var _ref = historyState || {},
|
265
|
-
key = _ref.key,
|
266
|
-
state = _ref.state;
|
267
|
-
|
268
|
-
var _window$location = window.location,
|
269
|
-
pathname = _window$location.pathname,
|
270
|
-
search = _window$location.search,
|
271
|
-
hash = _window$location.hash;
|
272
|
-
var path = pathname + search + hash;
|
273
|
-
process.env.NODE_ENV !== "production" ? 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 + '".') : void 0;
|
274
|
-
if (basename) path = stripBasename(path, basename);
|
275
|
-
return createLocation(path, state, key);
|
276
|
-
}
|
277
|
-
|
278
|
-
function createKey() {
|
279
|
-
return Math.random().toString(36).substr(2, keyLength);
|
280
|
-
}
|
281
|
-
|
282
|
-
var transitionManager = createTransitionManager();
|
283
|
-
|
284
|
-
function setState(nextState) {
|
285
|
-
_extends(history, nextState);
|
286
|
-
|
287
|
-
history.length = globalHistory.length;
|
288
|
-
transitionManager.notifyListeners(history.location, history.action);
|
289
|
-
}
|
290
|
-
|
291
|
-
function handlePopState(event) {
|
292
|
-
// Ignore extraneous popstate events in WebKit.
|
293
|
-
if (isExtraneousPopstateEvent(event)) return;
|
294
|
-
handlePop(getDOMLocation(event.state));
|
295
|
-
}
|
296
|
-
|
297
|
-
function handleHashChange() {
|
298
|
-
handlePop(getDOMLocation(getHistoryState()));
|
299
|
-
}
|
300
|
-
|
301
|
-
var forceNextPop = false;
|
302
|
-
|
303
|
-
function handlePop(location) {
|
304
|
-
if (forceNextPop) {
|
305
|
-
forceNextPop = false;
|
306
|
-
setState();
|
307
|
-
} else {
|
308
|
-
var action = 'POP';
|
309
|
-
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
|
310
|
-
if (ok) {
|
311
|
-
setState({
|
312
|
-
action: action,
|
313
|
-
location: location
|
314
|
-
});
|
315
|
-
} else {
|
316
|
-
revertPop(location);
|
317
|
-
}
|
318
|
-
});
|
319
|
-
}
|
320
|
-
}
|
321
|
-
|
322
|
-
function revertPop(fromLocation) {
|
323
|
-
var toLocation = history.location; // TODO: We could probably make this more reliable by
|
324
|
-
// keeping a list of keys we've seen in sessionStorage.
|
325
|
-
// Instead, we just default to 0 for keys we don't know.
|
326
|
-
|
327
|
-
var toIndex = allKeys.indexOf(toLocation.key);
|
328
|
-
if (toIndex === -1) toIndex = 0;
|
329
|
-
var fromIndex = allKeys.indexOf(fromLocation.key);
|
330
|
-
if (fromIndex === -1) fromIndex = 0;
|
331
|
-
var delta = toIndex - fromIndex;
|
332
|
-
|
333
|
-
if (delta) {
|
334
|
-
forceNextPop = true;
|
335
|
-
go(delta);
|
336
|
-
}
|
337
|
-
}
|
338
|
-
|
339
|
-
var initialLocation = getDOMLocation(getHistoryState());
|
340
|
-
var allKeys = [initialLocation.key]; // Public interface
|
341
|
-
|
342
|
-
function createHref(location) {
|
343
|
-
return basename + createPath(location);
|
344
|
-
}
|
345
|
-
|
346
|
-
function push(path, state) {
|
347
|
-
process.env.NODE_ENV !== "production" ? 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') : void 0;
|
348
|
-
var action = 'PUSH';
|
349
|
-
var location = createLocation(path, state, createKey(), history.location);
|
350
|
-
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
|
351
|
-
if (!ok) return;
|
352
|
-
var href = createHref(location);
|
353
|
-
var key = location.key,
|
354
|
-
state = location.state;
|
355
|
-
|
356
|
-
if (canUseHistory) {
|
357
|
-
globalHistory.pushState({
|
358
|
-
key: key,
|
359
|
-
state: state
|
360
|
-
}, null, href);
|
361
|
-
|
362
|
-
if (forceRefresh) {
|
363
|
-
window.location.href = href;
|
364
|
-
} else {
|
365
|
-
var prevIndex = allKeys.indexOf(history.location.key);
|
366
|
-
var nextKeys = allKeys.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);
|
367
|
-
nextKeys.push(location.key);
|
368
|
-
allKeys = nextKeys;
|
369
|
-
setState({
|
370
|
-
action: action,
|
371
|
-
location: location
|
372
|
-
});
|
373
|
-
}
|
374
|
-
} else {
|
375
|
-
process.env.NODE_ENV !== "production" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;
|
376
|
-
window.location.href = href;
|
377
|
-
}
|
378
|
-
});
|
379
|
-
}
|
380
|
-
|
381
|
-
function replace(path, state) {
|
382
|
-
process.env.NODE_ENV !== "production" ? 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') : void 0;
|
383
|
-
var action = 'REPLACE';
|
384
|
-
var location = createLocation(path, state, createKey(), history.location);
|
385
|
-
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
|
386
|
-
if (!ok) return;
|
387
|
-
var href = createHref(location);
|
388
|
-
var key = location.key,
|
389
|
-
state = location.state;
|
390
|
-
|
391
|
-
if (canUseHistory) {
|
392
|
-
globalHistory.replaceState({
|
393
|
-
key: key,
|
394
|
-
state: state
|
395
|
-
}, null, href);
|
396
|
-
|
397
|
-
if (forceRefresh) {
|
398
|
-
window.location.replace(href);
|
399
|
-
} else {
|
400
|
-
var prevIndex = allKeys.indexOf(history.location.key);
|
401
|
-
if (prevIndex !== -1) allKeys[prevIndex] = location.key;
|
402
|
-
setState({
|
403
|
-
action: action,
|
404
|
-
location: location
|
405
|
-
});
|
406
|
-
}
|
407
|
-
} else {
|
408
|
-
process.env.NODE_ENV !== "production" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;
|
409
|
-
window.location.replace(href);
|
410
|
-
}
|
411
|
-
});
|
412
|
-
}
|
413
|
-
|
414
|
-
function go(n) {
|
415
|
-
globalHistory.go(n);
|
416
|
-
}
|
417
|
-
|
418
|
-
function goBack() {
|
419
|
-
go(-1);
|
420
|
-
}
|
421
|
-
|
422
|
-
function goForward() {
|
423
|
-
go(1);
|
424
|
-
}
|
425
|
-
|
426
|
-
var listenerCount = 0;
|
427
|
-
|
428
|
-
function checkDOMListeners(delta) {
|
429
|
-
listenerCount += delta;
|
430
|
-
|
431
|
-
if (listenerCount === 1 && delta === 1) {
|
432
|
-
window.addEventListener(PopStateEvent, handlePopState);
|
433
|
-
if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);
|
434
|
-
} else if (listenerCount === 0) {
|
435
|
-
window.removeEventListener(PopStateEvent, handlePopState);
|
436
|
-
if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);
|
437
|
-
}
|
438
|
-
}
|
439
|
-
|
440
|
-
var isBlocked = false;
|
441
|
-
|
442
|
-
function block(prompt) {
|
443
|
-
if (prompt === void 0) {
|
444
|
-
prompt = false;
|
445
|
-
}
|
446
|
-
|
447
|
-
var unblock = transitionManager.setPrompt(prompt);
|
448
|
-
|
449
|
-
if (!isBlocked) {
|
450
|
-
checkDOMListeners(1);
|
451
|
-
isBlocked = true;
|
452
|
-
}
|
453
|
-
|
454
|
-
return function () {
|
455
|
-
if (isBlocked) {
|
456
|
-
isBlocked = false;
|
457
|
-
checkDOMListeners(-1);
|
458
|
-
}
|
459
|
-
|
460
|
-
return unblock();
|
461
|
-
};
|
462
|
-
}
|
463
|
-
|
464
|
-
function listen(listener) {
|
465
|
-
var unlisten = transitionManager.appendListener(listener);
|
466
|
-
checkDOMListeners(1);
|
467
|
-
return function () {
|
468
|
-
checkDOMListeners(-1);
|
469
|
-
unlisten();
|
470
|
-
};
|
471
|
-
}
|
472
|
-
|
473
|
-
var history = {
|
474
|
-
length: globalHistory.length,
|
475
|
-
action: 'POP',
|
476
|
-
location: initialLocation,
|
477
|
-
createHref: createHref,
|
478
|
-
push: push,
|
479
|
-
replace: replace,
|
480
|
-
go: go,
|
481
|
-
goBack: goBack,
|
482
|
-
goForward: goForward,
|
483
|
-
block: block,
|
484
|
-
listen: listen
|
485
|
-
};
|
486
|
-
return history;
|
487
|
-
}
|
488
|
-
|
489
|
-
var HashChangeEvent$1 = 'hashchange';
|
490
|
-
var HashPathCoders = {
|
491
|
-
hashbang: {
|
492
|
-
encodePath: function encodePath(path) {
|
493
|
-
return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);
|
494
|
-
},
|
495
|
-
decodePath: function decodePath(path) {
|
496
|
-
return path.charAt(0) === '!' ? path.substr(1) : path;
|
497
|
-
}
|
498
|
-
},
|
499
|
-
noslash: {
|
500
|
-
encodePath: stripLeadingSlash,
|
501
|
-
decodePath: addLeadingSlash
|
502
|
-
},
|
503
|
-
slash: {
|
504
|
-
encodePath: addLeadingSlash,
|
505
|
-
decodePath: addLeadingSlash
|
506
|
-
}
|
507
|
-
};
|
508
|
-
|
509
|
-
function getHashPath() {
|
510
|
-
// We can't use window.location.hash here because it's not
|
511
|
-
// consistent across browsers - Firefox will pre-decode it!
|
512
|
-
var href = window.location.href;
|
513
|
-
var hashIndex = href.indexOf('#');
|
514
|
-
return hashIndex === -1 ? '' : href.substring(hashIndex + 1);
|
515
|
-
}
|
516
|
-
|
517
|
-
function pushHashPath(path) {
|
518
|
-
window.location.hash = path;
|
519
|
-
}
|
520
|
-
|
521
|
-
function replaceHashPath(path) {
|
522
|
-
var hashIndex = window.location.href.indexOf('#');
|
523
|
-
window.location.replace(window.location.href.slice(0, hashIndex >= 0 ? hashIndex : 0) + '#' + path);
|
524
|
-
}
|
525
|
-
|
526
|
-
function createHashHistory(props) {
|
527
|
-
if (props === void 0) {
|
528
|
-
props = {};
|
529
|
-
}
|
530
|
-
|
531
|
-
!canUseDOM ? process.env.NODE_ENV !== "production" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;
|
532
|
-
var globalHistory = window.history;
|
533
|
-
var canGoWithoutReload = supportsGoWithoutReloadUsingHash();
|
534
|
-
var _props = props,
|
535
|
-
_props$getUserConfirm = _props.getUserConfirmation,
|
536
|
-
getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,
|
537
|
-
_props$hashType = _props.hashType,
|
538
|
-
hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;
|
539
|
-
var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';
|
540
|
-
var _HashPathCoders$hashT = HashPathCoders[hashType],
|
541
|
-
encodePath = _HashPathCoders$hashT.encodePath,
|
542
|
-
decodePath = _HashPathCoders$hashT.decodePath;
|
543
|
-
|
544
|
-
function getDOMLocation() {
|
545
|
-
var path = decodePath(getHashPath());
|
546
|
-
process.env.NODE_ENV !== "production" ? 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 + '".') : void 0;
|
547
|
-
if (basename) path = stripBasename(path, basename);
|
548
|
-
return createLocation(path);
|
549
|
-
}
|
550
|
-
|
551
|
-
var transitionManager = createTransitionManager();
|
552
|
-
|
553
|
-
function setState(nextState) {
|
554
|
-
_extends(history, nextState);
|
555
|
-
|
556
|
-
history.length = globalHistory.length;
|
557
|
-
transitionManager.notifyListeners(history.location, history.action);
|
558
|
-
}
|
559
|
-
|
560
|
-
var forceNextPop = false;
|
561
|
-
var ignorePath = null;
|
562
|
-
|
563
|
-
function handleHashChange() {
|
564
|
-
var path = getHashPath();
|
565
|
-
var encodedPath = encodePath(path);
|
566
|
-
|
567
|
-
if (path !== encodedPath) {
|
568
|
-
// Ensure we always have a properly-encoded hash.
|
569
|
-
replaceHashPath(encodedPath);
|
570
|
-
} else {
|
571
|
-
var location = getDOMLocation();
|
572
|
-
var prevLocation = history.location;
|
573
|
-
if (!forceNextPop && locationsAreEqual(prevLocation, location)) return; // A hashchange doesn't always == location change.
|
574
|
-
|
575
|
-
if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.
|
576
|
-
|
577
|
-
ignorePath = null;
|
578
|
-
handlePop(location);
|
579
|
-
}
|
580
|
-
}
|
581
|
-
|
582
|
-
function handlePop(location) {
|
583
|
-
if (forceNextPop) {
|
584
|
-
forceNextPop = false;
|
585
|
-
setState();
|
586
|
-
} else {
|
587
|
-
var action = 'POP';
|
588
|
-
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
|
589
|
-
if (ok) {
|
590
|
-
setState({
|
591
|
-
action: action,
|
592
|
-
location: location
|
593
|
-
});
|
594
|
-
} else {
|
595
|
-
revertPop(location);
|
596
|
-
}
|
597
|
-
});
|
598
|
-
}
|
599
|
-
}
|
600
|
-
|
601
|
-
function revertPop(fromLocation) {
|
602
|
-
var toLocation = history.location; // TODO: We could probably make this more reliable by
|
603
|
-
// keeping a list of paths we've seen in sessionStorage.
|
604
|
-
// Instead, we just default to 0 for paths we don't know.
|
605
|
-
|
606
|
-
var toIndex = allPaths.lastIndexOf(createPath(toLocation));
|
607
|
-
if (toIndex === -1) toIndex = 0;
|
608
|
-
var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));
|
609
|
-
if (fromIndex === -1) fromIndex = 0;
|
610
|
-
var delta = toIndex - fromIndex;
|
611
|
-
|
612
|
-
if (delta) {
|
613
|
-
forceNextPop = true;
|
614
|
-
go(delta);
|
615
|
-
}
|
616
|
-
} // Ensure the hash is encoded properly before doing anything else.
|
617
|
-
|
618
|
-
|
619
|
-
var path = getHashPath();
|
620
|
-
var encodedPath = encodePath(path);
|
621
|
-
if (path !== encodedPath) replaceHashPath(encodedPath);
|
622
|
-
var initialLocation = getDOMLocation();
|
623
|
-
var allPaths = [createPath(initialLocation)]; // Public interface
|
624
|
-
|
625
|
-
function createHref(location) {
|
626
|
-
return '#' + encodePath(basename + createPath(location));
|
627
|
-
}
|
628
|
-
|
629
|
-
function push(path, state) {
|
630
|
-
process.env.NODE_ENV !== "production" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;
|
631
|
-
var action = 'PUSH';
|
632
|
-
var location = createLocation(path, undefined, undefined, history.location);
|
633
|
-
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
|
634
|
-
if (!ok) return;
|
635
|
-
var path = createPath(location);
|
636
|
-
var encodedPath = encodePath(basename + path);
|
637
|
-
var hashChanged = getHashPath() !== encodedPath;
|
638
|
-
|
639
|
-
if (hashChanged) {
|
640
|
-
// We cannot tell if a hashchange was caused by a PUSH, so we'd
|
641
|
-
// rather setState here and ignore the hashchange. The caveat here
|
642
|
-
// is that other hash histories in the page will consider it a POP.
|
643
|
-
ignorePath = path;
|
644
|
-
pushHashPath(encodedPath);
|
645
|
-
var prevIndex = allPaths.lastIndexOf(createPath(history.location));
|
646
|
-
var nextPaths = allPaths.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);
|
647
|
-
nextPaths.push(path);
|
648
|
-
allPaths = nextPaths;
|
649
|
-
setState({
|
650
|
-
action: action,
|
651
|
-
location: location
|
652
|
-
});
|
653
|
-
} else {
|
654
|
-
process.env.NODE_ENV !== "production" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;
|
655
|
-
setState();
|
656
|
-
}
|
657
|
-
});
|
658
|
-
}
|
659
|
-
|
660
|
-
function replace(path, state) {
|
661
|
-
process.env.NODE_ENV !== "production" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;
|
662
|
-
var action = 'REPLACE';
|
663
|
-
var location = createLocation(path, undefined, undefined, history.location);
|
664
|
-
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
|
665
|
-
if (!ok) return;
|
666
|
-
var path = createPath(location);
|
667
|
-
var encodedPath = encodePath(basename + path);
|
668
|
-
var hashChanged = getHashPath() !== encodedPath;
|
669
|
-
|
670
|
-
if (hashChanged) {
|
671
|
-
// We cannot tell if a hashchange was caused by a REPLACE, so we'd
|
672
|
-
// rather setState here and ignore the hashchange. The caveat here
|
673
|
-
// is that other hash histories in the page will consider it a POP.
|
674
|
-
ignorePath = path;
|
675
|
-
replaceHashPath(encodedPath);
|
676
|
-
}
|
677
|
-
|
678
|
-
var prevIndex = allPaths.indexOf(createPath(history.location));
|
679
|
-
if (prevIndex !== -1) allPaths[prevIndex] = path;
|
680
|
-
setState({
|
681
|
-
action: action,
|
682
|
-
location: location
|
683
|
-
});
|
684
|
-
});
|
685
|
-
}
|
686
|
-
|
687
|
-
function go(n) {
|
688
|
-
process.env.NODE_ENV !== "production" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;
|
689
|
-
globalHistory.go(n);
|
690
|
-
}
|
691
|
-
|
692
|
-
function goBack() {
|
693
|
-
go(-1);
|
694
|
-
}
|
695
|
-
|
696
|
-
function goForward() {
|
697
|
-
go(1);
|
698
|
-
}
|
699
|
-
|
700
|
-
var listenerCount = 0;
|
701
|
-
|
702
|
-
function checkDOMListeners(delta) {
|
703
|
-
listenerCount += delta;
|
704
|
-
|
705
|
-
if (listenerCount === 1 && delta === 1) {
|
706
|
-
window.addEventListener(HashChangeEvent$1, handleHashChange);
|
707
|
-
} else if (listenerCount === 0) {
|
708
|
-
window.removeEventListener(HashChangeEvent$1, handleHashChange);
|
709
|
-
}
|
710
|
-
}
|
711
|
-
|
712
|
-
var isBlocked = false;
|
713
|
-
|
714
|
-
function block(prompt) {
|
715
|
-
if (prompt === void 0) {
|
716
|
-
prompt = false;
|
717
|
-
}
|
718
|
-
|
719
|
-
var unblock = transitionManager.setPrompt(prompt);
|
720
|
-
|
721
|
-
if (!isBlocked) {
|
722
|
-
checkDOMListeners(1);
|
723
|
-
isBlocked = true;
|
724
|
-
}
|
725
|
-
|
726
|
-
return function () {
|
727
|
-
if (isBlocked) {
|
728
|
-
isBlocked = false;
|
729
|
-
checkDOMListeners(-1);
|
730
|
-
}
|
731
|
-
|
732
|
-
return unblock();
|
733
|
-
};
|
734
|
-
}
|
735
|
-
|
736
|
-
function listen(listener) {
|
737
|
-
var unlisten = transitionManager.appendListener(listener);
|
738
|
-
checkDOMListeners(1);
|
739
|
-
return function () {
|
740
|
-
checkDOMListeners(-1);
|
741
|
-
unlisten();
|
742
|
-
};
|
743
|
-
}
|
744
|
-
|
745
|
-
var history = {
|
746
|
-
length: globalHistory.length,
|
747
|
-
action: 'POP',
|
748
|
-
location: initialLocation,
|
749
|
-
createHref: createHref,
|
750
|
-
push: push,
|
751
|
-
replace: replace,
|
752
|
-
go: go,
|
753
|
-
goBack: goBack,
|
754
|
-
goForward: goForward,
|
755
|
-
block: block,
|
756
|
-
listen: listen
|
757
|
-
};
|
758
|
-
return history;
|
759
|
-
}
|
760
|
-
|
761
|
-
function clamp(n, lowerBound, upperBound) {
|
762
|
-
return Math.min(Math.max(n, lowerBound), upperBound);
|
763
|
-
}
|
764
|
-
/**
|
765
|
-
* Creates a history object that stores locations in memory.
|
766
|
-
*/
|
767
|
-
|
768
|
-
|
769
|
-
function createMemoryHistory(props) {
|
770
|
-
if (props === void 0) {
|
771
|
-
props = {};
|
772
|
-
}
|
773
|
-
|
774
|
-
var _props = props,
|
775
|
-
getUserConfirmation = _props.getUserConfirmation,
|
776
|
-
_props$initialEntries = _props.initialEntries,
|
777
|
-
initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,
|
778
|
-
_props$initialIndex = _props.initialIndex,
|
779
|
-
initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,
|
780
|
-
_props$keyLength = _props.keyLength,
|
781
|
-
keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;
|
782
|
-
var transitionManager = createTransitionManager();
|
783
|
-
|
784
|
-
function setState(nextState) {
|
785
|
-
_extends(history, nextState);
|
786
|
-
|
787
|
-
history.length = history.entries.length;
|
788
|
-
transitionManager.notifyListeners(history.location, history.action);
|
789
|
-
}
|
790
|
-
|
791
|
-
function createKey() {
|
792
|
-
return Math.random().toString(36).substr(2, keyLength);
|
793
|
-
}
|
794
|
-
|
795
|
-
var index = clamp(initialIndex, 0, initialEntries.length - 1);
|
796
|
-
var entries = initialEntries.map(function (entry) {
|
797
|
-
return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());
|
798
|
-
}); // Public interface
|
799
|
-
|
800
|
-
var createHref = createPath;
|
801
|
-
|
802
|
-
function push(path, state) {
|
803
|
-
process.env.NODE_ENV !== "production" ? 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') : void 0;
|
804
|
-
var action = 'PUSH';
|
805
|
-
var location = createLocation(path, state, createKey(), history.location);
|
806
|
-
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
|
807
|
-
if (!ok) return;
|
808
|
-
var prevIndex = history.index;
|
809
|
-
var nextIndex = prevIndex + 1;
|
810
|
-
var nextEntries = history.entries.slice(0);
|
811
|
-
|
812
|
-
if (nextEntries.length > nextIndex) {
|
813
|
-
nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);
|
814
|
-
} else {
|
815
|
-
nextEntries.push(location);
|
816
|
-
}
|
817
|
-
|
818
|
-
setState({
|
819
|
-
action: action,
|
820
|
-
location: location,
|
821
|
-
index: nextIndex,
|
822
|
-
entries: nextEntries
|
823
|
-
});
|
824
|
-
});
|
825
|
-
}
|
826
|
-
|
827
|
-
function replace(path, state) {
|
828
|
-
process.env.NODE_ENV !== "production" ? 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') : void 0;
|
829
|
-
var action = 'REPLACE';
|
830
|
-
var location = createLocation(path, state, createKey(), history.location);
|
831
|
-
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
|
832
|
-
if (!ok) return;
|
833
|
-
history.entries[history.index] = location;
|
834
|
-
setState({
|
835
|
-
action: action,
|
836
|
-
location: location
|
837
|
-
});
|
838
|
-
});
|
839
|
-
}
|
840
|
-
|
841
|
-
function go(n) {
|
842
|
-
var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);
|
843
|
-
var action = 'POP';
|
844
|
-
var location = history.entries[nextIndex];
|
845
|
-
transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
|
846
|
-
if (ok) {
|
847
|
-
setState({
|
848
|
-
action: action,
|
849
|
-
location: location,
|
850
|
-
index: nextIndex
|
851
|
-
});
|
852
|
-
} else {
|
853
|
-
// Mimic the behavior of DOM histories by
|
854
|
-
// causing a render after a cancelled POP.
|
855
|
-
setState();
|
856
|
-
}
|
857
|
-
});
|
858
|
-
}
|
859
|
-
|
860
|
-
function goBack() {
|
861
|
-
go(-1);
|
862
|
-
}
|
863
|
-
|
864
|
-
function goForward() {
|
865
|
-
go(1);
|
866
|
-
}
|
867
|
-
|
868
|
-
function canGo(n) {
|
869
|
-
var nextIndex = history.index + n;
|
870
|
-
return nextIndex >= 0 && nextIndex < history.entries.length;
|
871
|
-
}
|
872
|
-
|
873
|
-
function block(prompt) {
|
874
|
-
if (prompt === void 0) {
|
875
|
-
prompt = false;
|
876
|
-
}
|
877
|
-
|
878
|
-
return transitionManager.setPrompt(prompt);
|
879
|
-
}
|
880
|
-
|
881
|
-
function listen(listener) {
|
882
|
-
return transitionManager.appendListener(listener);
|
883
|
-
}
|
884
|
-
|
885
|
-
var history = {
|
886
|
-
length: entries.length,
|
887
|
-
action: 'POP',
|
888
|
-
location: entries[index],
|
889
|
-
index: index,
|
890
|
-
entries: entries,
|
891
|
-
createHref: createHref,
|
892
|
-
push: push,
|
893
|
-
replace: replace,
|
894
|
-
go: go,
|
895
|
-
goBack: goBack,
|
896
|
-
goForward: goForward,
|
897
|
-
canGo: canGo,
|
898
|
-
block: block,
|
899
|
-
listen: listen
|
900
|
-
};
|
901
|
-
return history;
|
902
|
-
}
|
903
|
-
|
904
|
-
export { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };
|