161 lines
No EOL
4.3 KiB
JavaScript
Executable file
161 lines
No EOL
4.3 KiB
JavaScript
Executable file
'use strict';
|
|
|
|
exports.__esModule = true;
|
|
|
|
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
var _warning = require('warning');
|
|
|
|
var _warning2 = _interopRequireDefault(_warning);
|
|
|
|
var _invariant = require('invariant');
|
|
|
|
var _invariant2 = _interopRequireDefault(_invariant);
|
|
|
|
var _PathUtils = require('./PathUtils');
|
|
|
|
var _Actions = require('./Actions');
|
|
|
|
var _createHistory = require('./createHistory');
|
|
|
|
var _createHistory2 = _interopRequireDefault(_createHistory);
|
|
|
|
function createStateStorage(entries) {
|
|
return entries.filter(function (entry) {
|
|
return entry.state;
|
|
}).reduce(function (memo, entry) {
|
|
memo[entry.key] = entry.state;
|
|
return memo;
|
|
}, {});
|
|
}
|
|
|
|
function createMemoryHistory() {
|
|
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
|
|
|
|
if (Array.isArray(options)) {
|
|
options = { entries: options };
|
|
} else if (typeof options === 'string') {
|
|
options = { entries: [options] };
|
|
}
|
|
|
|
var history = _createHistory2['default'](_extends({}, options, {
|
|
getCurrentLocation: getCurrentLocation,
|
|
finishTransition: finishTransition,
|
|
saveState: saveState,
|
|
go: go
|
|
}));
|
|
|
|
var _options = options;
|
|
var entries = _options.entries;
|
|
var current = _options.current;
|
|
|
|
if (typeof entries === 'string') {
|
|
entries = [entries];
|
|
} else if (!Array.isArray(entries)) {
|
|
entries = ['/'];
|
|
}
|
|
|
|
entries = entries.map(function (entry) {
|
|
var key = history.createKey();
|
|
|
|
if (typeof entry === 'string') return { pathname: entry, key: key };
|
|
|
|
if (typeof entry === 'object' && entry) return _extends({}, entry, { key: key });
|
|
|
|
!false ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Unable to create history entry from %s', entry) : _invariant2['default'](false) : undefined;
|
|
});
|
|
|
|
if (current == null) {
|
|
current = entries.length - 1;
|
|
} else {
|
|
!(current >= 0 && current < entries.length) ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Current index must be >= 0 and < %s, was %s', entries.length, current) : _invariant2['default'](false) : undefined;
|
|
}
|
|
|
|
var storage = createStateStorage(entries);
|
|
|
|
function saveState(key, state) {
|
|
storage[key] = state;
|
|
}
|
|
|
|
function readState(key) {
|
|
return storage[key];
|
|
}
|
|
|
|
function getCurrentLocation() {
|
|
var entry = entries[current];
|
|
var basename = entry.basename;
|
|
var pathname = entry.pathname;
|
|
var search = entry.search;
|
|
|
|
var path = (basename || '') + pathname + (search || '');
|
|
|
|
var key = undefined,
|
|
state = undefined;
|
|
if (entry.key) {
|
|
key = entry.key;
|
|
state = readState(key);
|
|
} else {
|
|
key = history.createKey();
|
|
state = null;
|
|
entry.key = key;
|
|
}
|
|
|
|
var location = _PathUtils.parsePath(path);
|
|
|
|
return history.createLocation(_extends({}, location, { state: state }), undefined, key);
|
|
}
|
|
|
|
function canGo(n) {
|
|
var index = current + n;
|
|
return index >= 0 && index < entries.length;
|
|
}
|
|
|
|
function go(n) {
|
|
if (n) {
|
|
if (!canGo(n)) {
|
|
process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'Cannot go(%s) there is not enough history', n) : undefined;
|
|
return;
|
|
}
|
|
|
|
current += n;
|
|
|
|
var currentLocation = getCurrentLocation();
|
|
|
|
// change action to POP
|
|
history.transitionTo(_extends({}, currentLocation, { action: _Actions.POP }));
|
|
}
|
|
}
|
|
|
|
function finishTransition(location) {
|
|
switch (location.action) {
|
|
case _Actions.PUSH:
|
|
current += 1;
|
|
|
|
// if we are not on the top of stack
|
|
// remove rest and push new
|
|
if (current < entries.length) entries.splice(current);
|
|
|
|
entries.push(location);
|
|
saveState(location.key, location.state);
|
|
break;
|
|
case _Actions.REPLACE:
|
|
entries[current] = location;
|
|
saveState(location.key, location.state);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return history;
|
|
}
|
|
|
|
exports['default'] = createMemoryHistory;
|
|
module.exports = exports['default'];
|
|
|
|
|
|
//////////////////
|
|
// WEBPACK FOOTER
|
|
// ./~/history/lib/createMemoryHistory.js
|
|
// module id = 2545
|
|
// module chunks = 4
|