@zohodesk/react-cli 1.1.18 → 1.1.19-exp.1

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