unpoly-rails 3.0.0.rc2 → 3.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,7 +5,7 @@
5
5
  /***/ (() => {
6
6
 
7
7
  window.up = {
8
- version: '3.0.0-rc2'
8
+ version: '3.0.0-rc3'
9
9
  };
10
10
 
11
11
 
@@ -111,15 +111,15 @@ up.util = (function () {
111
111
  return block;
112
112
  }
113
113
  }
114
- function map(array, block) {
115
- if (array.length === 0) {
114
+ function map(list, block) {
115
+ if (list.length === 0) {
116
116
  return [];
117
117
  }
118
118
  block = iteratee(block);
119
119
  let mapped = [];
120
- for (let i = 0; i < array.length; i++) {
121
- let element = array[i];
122
- mapped.push(block(element, i));
120
+ let i = 0;
121
+ for (let item of list) {
122
+ mapped.push(block(item, i++));
123
123
  }
124
124
  return mapped;
125
125
  }
@@ -131,8 +131,9 @@ up.util = (function () {
131
131
  return map(array, pairer).reduce(merger, {});
132
132
  }
133
133
  function each(array, block) {
134
- for (let i = 0; i < array.length; i++) {
135
- block(array[i], i);
134
+ let i = 0;
135
+ for (let item of array) {
136
+ block(item, i++);
136
137
  }
137
138
  }
138
139
  function isNull(object) {
@@ -309,10 +310,11 @@ up.util = (function () {
309
310
  function some(list, tester) {
310
311
  return !!findResult(list, tester);
311
312
  }
312
- function findResult(array, tester) {
313
+ function findResult(list, tester) {
313
314
  tester = iteratee(tester);
314
- for (let i = 0; i < array.length; i++) {
315
- const result = tester(array[i], i);
315
+ let i = 0;
316
+ for (let item of list) {
317
+ const result = tester(item, i++);
316
318
  if (result) {
317
319
  return result;
318
320
  }
@@ -321,8 +323,9 @@ up.util = (function () {
321
323
  function every(list, tester) {
322
324
  tester = iteratee(tester);
323
325
  let match = true;
324
- for (let i = 0; i < list.length; i++) {
325
- if (!tester(list[i], i)) {
326
+ let i = 0;
327
+ for (let item of list) {
328
+ if (!tester(item, i++)) {
326
329
  match = false;
327
330
  break;
328
331
  }
@@ -494,7 +497,7 @@ up.util = (function () {
494
497
  function flatMap(array, block) {
495
498
  return flatten(map(array, block));
496
499
  }
497
- function always(promise, callback) {
500
+ function always(promise, callback = identity) {
498
501
  return promise.then(callback, callback);
499
502
  }
500
503
  function newDeferred() {
@@ -596,7 +599,7 @@ up.util = (function () {
596
599
  Object.defineProperty(object, prop, { get });
597
600
  }
598
601
  function defineDelegates(object, props, targetProvider) {
599
- wrapList(props).forEach(function (prop) {
602
+ for (let prop of props) {
600
603
  Object.defineProperty(object, prop, {
601
604
  get() {
602
605
  const target = targetProvider.call(this);
@@ -611,7 +614,7 @@ up.util = (function () {
611
614
  target[prop] = newValue;
612
615
  }
613
616
  });
614
- });
617
+ }
615
618
  }
616
619
  function stringifyArg(arg) {
617
620
  let string;
@@ -706,6 +709,14 @@ up.util = (function () {
706
709
  };
707
710
  }
708
711
  }
712
+ function safeStringifyJSON(value) {
713
+ let json = JSON.stringify(value);
714
+ return escapeHighASCII(json);
715
+ }
716
+ function escapeHighASCII(string) {
717
+ let unicodeEscape = (char) => "\\u" + char.charCodeAt(0).toString(16).padStart(4, '0');
718
+ return string.replace(/[^\x00-\x7F]/g, unicodeEscape);
719
+ }
709
720
  return {
710
721
  parseURL,
711
722
  normalizeURL,
@@ -801,7 +812,8 @@ up.util = (function () {
801
812
  sprintf,
802
813
  renameKeys,
803
814
  negate,
804
- memoizeMethod
815
+ memoizeMethod,
816
+ safeStringifyJSON,
805
817
  };
806
818
  })();
807
819
 
@@ -1162,9 +1174,17 @@ up.element = (function () {
1162
1174
  klass = klass.replace(/:/g, '\\:');
1163
1175
  return `.${klass}`;
1164
1176
  }
1165
- function createDocumentFromHTML(html) {
1177
+ function createBrokenDocumentFromHTML(html) {
1166
1178
  return new DOMParser().parseFromString(html, 'text/html');
1167
1179
  }
1180
+ function fixScriptish(scriptish) {
1181
+ let clone = document.createElement(scriptish.tagName);
1182
+ for (let { name, value } of scriptish.attributes) {
1183
+ clone.setAttribute(name, value);
1184
+ }
1185
+ clone.textContent = scriptish.innerHTML;
1186
+ scriptish.replaceWith(clone);
1187
+ }
1168
1188
  function createFromHTML(html) {
1169
1189
  const range = document.createRange();
1170
1190
  range.setStart(document.body, 0);
@@ -1427,7 +1447,8 @@ up.element = (function () {
1427
1447
  isSingleton,
1428
1448
  attrSelector,
1429
1449
  tagName: elementTagName,
1430
- createDocumentFromHTML,
1450
+ createBrokenDocumentFromHTML,
1451
+ fixScriptish,
1431
1452
  createFromHTML,
1432
1453
  get root() { return getRoot(); },
1433
1454
  paint,
@@ -1624,82 +1645,26 @@ up.LogConfig = class LogConfig extends up.Config {
1624
1645
  /***/ (() => {
1625
1646
 
1626
1647
  const u = up.util;
1627
- up.Cache = class Cache {
1628
- constructor(config = {}) {
1629
- this.config = config;
1648
+ up.FIFOCache = class FIFOCache {
1649
+ constructor({ capacity = 10, normalizeKey = u.identity } = {}) {
1630
1650
  this.map = new Map();
1651
+ this.capacity = capacity;
1652
+ this.normalizeKey = normalizeKey;
1631
1653
  }
1632
- size() {
1633
- return this.map.size;
1634
- }
1635
- maxSize() {
1636
- return u.evalOption(this.config.size);
1637
- }
1638
- evictAge() {
1639
- return u.evalOption(this.config.evictAge);
1640
- }
1641
- normalizeStoreKey(key) {
1642
- return key;
1643
- }
1644
- isDisabled() {
1645
- return this.maxSize() === 0 || this.evictAge() === 0;
1646
- }
1647
- evict() {
1648
- this.map.clear();
1649
- }
1650
- records() {
1651
- return this.map.values();
1652
- }
1653
- makeRoomForAnotherRecord() {
1654
- const maxSize = this.maxSize();
1655
- const currentSize = this.size();
1656
- if (!maxSize || currentSize < maxSize)
1657
- return;
1658
- let records = Array.from(this.records());
1659
- records.sort((a, b) => b.createdAt - a.createdAt);
1660
- const overflow = currentSize - maxSize + 1;
1661
- for (let i = 0; i < overflow; i++) {
1662
- let key = records.pop().key;
1663
- this.map.delete(key);
1664
- }
1665
- }
1666
- alias(oldKey, newKey) {
1667
- const value = this.get(oldKey);
1668
- if (u.isDefined(value)) {
1669
- this.set(newKey, value);
1670
- }
1654
+ get(key) {
1655
+ key = this.normalizeKey(key);
1656
+ return this.map.get(key);
1671
1657
  }
1672
1658
  set(key, value) {
1673
- if (this.isDisabled())
1674
- return;
1675
- this.makeRoomForAnotherRecord();
1676
- key = this.normalizeStoreKey(key);
1677
- const createdAt = new Date();
1678
- const record = { key, value, createdAt };
1679
- this.map.set(key, record);
1680
- }
1681
- remove(key) {
1682
- key = this.normalizeStoreKey(key);
1683
- this.map.delete(key);
1684
- }
1685
- isUsable(record) {
1686
- const evictAge = this.evictAge();
1687
- if (!evictAge)
1688
- return true;
1689
- const age = new Date() - record.createdAt;
1690
- return age < evictAge;
1691
- }
1692
- get(key) {
1693
- const storeKey = this.normalizeStoreKey(key);
1694
- let record = this.map.get(storeKey);
1695
- if (record) {
1696
- if (this.isUsable(record)) {
1697
- return record.value;
1698
- }
1699
- else {
1700
- this.remove(key);
1701
- }
1659
+ if (this.map.size === this.capacity) {
1660
+ let oldestKey = this.map.keys().next().value;
1661
+ this.map.delete(oldestKey);
1702
1662
  }
1663
+ key = this.normalizeKey(key);
1664
+ this.map.set(key, value);
1665
+ }
1666
+ clear() {
1667
+ this.map.clear();
1703
1668
  }
1704
1669
  };
1705
1670
 
@@ -4161,44 +4126,6 @@ up.FragmentScrolling = class FragmentScrolling extends up.FragmentProcessor {
4161
4126
  /* 47 */
4162
4127
  /***/ (() => {
4163
4128
 
4164
- const u = up.util;
4165
- const e = up.element;
4166
- up.HTMLWrapper = class HTMLWrapper {
4167
- constructor(tagName) {
4168
- this.tagName = tagName;
4169
- const openTag = `<${this.tagName}[^>]*>`;
4170
- const closeTag = `</${this.tagName}>`;
4171
- const innerHTML = "(.|\\s)*?";
4172
- this.pattern = new RegExp(openTag + innerHTML + closeTag, 'ig');
4173
- this.attrName = `up-wrapped-${this.tagName}`;
4174
- }
4175
- strip(html) {
4176
- return html.replace(this.pattern, '');
4177
- }
4178
- wrap(html) {
4179
- return html.replace(this.pattern, this.wrapMatch.bind(this));
4180
- }
4181
- wrapMatch(match) {
4182
- this.didWrap = true;
4183
- return '<meta name="' + this.attrName + '" value="' + u.escapeHTML(match) + '">';
4184
- }
4185
- unwrap(element) {
4186
- if (!this.didWrap) {
4187
- return;
4188
- }
4189
- for (let wrappedChild of element.querySelectorAll(`meta[name='${this.attrName}']`)) {
4190
- const originalHTML = wrappedChild.getAttribute('value');
4191
- const restoredElement = e.createFromHTML(originalHTML);
4192
- wrappedChild.replaceWith(restoredElement);
4193
- }
4194
- }
4195
- };
4196
-
4197
-
4198
- /***/ }),
4199
- /* 48 */
4200
- /***/ (() => {
4201
-
4202
4129
  const e = up.element;
4203
4130
  const u = up.util;
4204
4131
  up.Layer = class Layer extends up.Record {
@@ -4412,11 +4339,14 @@ up.Layer = class Layer extends up.Record {
4412
4339
  let focusedElement = document.activeElement;
4413
4340
  return focusedElement !== document.body && this.element.contains(focusedElement);
4414
4341
  }
4342
+ reset() {
4343
+ Object.assign(this, this.defaults());
4344
+ }
4415
4345
  };
4416
4346
 
4417
4347
 
4418
4348
  /***/ }),
4419
- /* 49 */
4349
+ /* 48 */
4420
4350
  /***/ (() => {
4421
4351
 
4422
4352
  const e = up.element;
@@ -4696,7 +4626,7 @@ up.Layer.Overlay = class Overlay extends up.Layer {
4696
4626
 
4697
4627
 
4698
4628
  /***/ }),
4699
- /* 50 */
4629
+ /* 49 */
4700
4630
  /***/ (() => {
4701
4631
 
4702
4632
  up.Layer.OverlayWithTether = class OverlayWithTether extends up.Layer.Overlay {
@@ -4733,7 +4663,7 @@ up.Layer.OverlayWithTether = class OverlayWithTether extends up.Layer.Overlay {
4733
4663
 
4734
4664
 
4735
4665
  /***/ }),
4736
- /* 51 */
4666
+ /* 50 */
4737
4667
  /***/ (() => {
4738
4668
 
4739
4669
  var _a;
@@ -4771,7 +4701,7 @@ up.Layer.OverlayWithViewport = (_a = class OverlayWithViewport extends up.Layer.
4771
4701
 
4772
4702
 
4773
4703
  /***/ }),
4774
- /* 52 */
4704
+ /* 51 */
4775
4705
  /***/ (() => {
4776
4706
 
4777
4707
  var _a;
@@ -4808,9 +4738,6 @@ up.Layer.Root = (_a = class Root extends up.Layer {
4808
4738
  cannotCloseRoot() {
4809
4739
  up.fail('Cannot close the root layer');
4810
4740
  }
4811
- reset() {
4812
- Object.assign(this, this.defaults());
4813
- }
4814
4741
  toString() {
4815
4742
  return "root layer";
4816
4743
  }
@@ -4820,7 +4747,7 @@ up.Layer.Root = (_a = class Root extends up.Layer {
4820
4747
 
4821
4748
 
4822
4749
  /***/ }),
4823
- /* 53 */
4750
+ /* 52 */
4824
4751
  /***/ (() => {
4825
4752
 
4826
4753
  var _a;
@@ -4831,7 +4758,7 @@ up.Layer.Modal = (_a = class Modal extends up.Layer.OverlayWithViewport {
4831
4758
 
4832
4759
 
4833
4760
  /***/ }),
4834
- /* 54 */
4761
+ /* 53 */
4835
4762
  /***/ (() => {
4836
4763
 
4837
4764
  var _a;
@@ -4842,7 +4769,7 @@ up.Layer.Popup = (_a = class Popup extends up.Layer.OverlayWithTether {
4842
4769
 
4843
4770
 
4844
4771
  /***/ }),
4845
- /* 55 */
4772
+ /* 54 */
4846
4773
  /***/ (() => {
4847
4774
 
4848
4775
  var _a;
@@ -4853,7 +4780,7 @@ up.Layer.Drawer = (_a = class Drawer extends up.Layer.OverlayWithViewport {
4853
4780
 
4854
4781
 
4855
4782
  /***/ }),
4856
- /* 56 */
4783
+ /* 55 */
4857
4784
  /***/ (() => {
4858
4785
 
4859
4786
  var _a;
@@ -4864,7 +4791,7 @@ up.Layer.Cover = (_a = class Cover extends up.Layer.OverlayWithViewport {
4864
4791
 
4865
4792
 
4866
4793
  /***/ }),
4867
- /* 57 */
4794
+ /* 56 */
4868
4795
  /***/ (() => {
4869
4796
 
4870
4797
  const u = up.util;
@@ -4954,7 +4881,7 @@ up.LayerLookup = class LayerLookup {
4954
4881
 
4955
4882
 
4956
4883
  /***/ }),
4957
- /* 58 */
4884
+ /* 57 */
4958
4885
  /***/ (() => {
4959
4886
 
4960
4887
  const u = up.util;
@@ -5067,7 +4994,7 @@ up.LayerStack = class LayerStack extends Array {
5067
4994
 
5068
4995
 
5069
4996
  /***/ }),
5070
- /* 59 */
4997
+ /* 58 */
5071
4998
  /***/ (() => {
5072
4999
 
5073
5000
  up.LinkFeedbackURLs = class LinkFeedbackURLs {
@@ -5098,7 +5025,7 @@ up.LinkFeedbackURLs = class LinkFeedbackURLs {
5098
5025
 
5099
5026
 
5100
5027
  /***/ }),
5101
- /* 60 */
5028
+ /* 59 */
5102
5029
  /***/ (() => {
5103
5030
 
5104
5031
  const u = up.util;
@@ -5168,7 +5095,7 @@ up.LinkPreloader = class LinkPreloader {
5168
5095
 
5169
5096
 
5170
5097
  /***/ }),
5171
- /* 61 */
5098
+ /* 60 */
5172
5099
  /***/ (function() {
5173
5100
 
5174
5101
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -5277,7 +5204,7 @@ up.MotionController = class MotionController {
5277
5204
 
5278
5205
 
5279
5206
  /***/ }),
5280
- /* 62 */
5207
+ /* 61 */
5281
5208
  /***/ (() => {
5282
5209
 
5283
5210
  const u = up.util;
@@ -5369,7 +5296,7 @@ up.NonceableCallback = class NonceableCallback {
5369
5296
 
5370
5297
 
5371
5298
  /***/ }),
5372
- /* 63 */
5299
+ /* 62 */
5373
5300
  /***/ (() => {
5374
5301
 
5375
5302
  const u = up.util;
@@ -5447,7 +5374,7 @@ up.OptionsParser = class OptionsParser {
5447
5374
 
5448
5375
 
5449
5376
  /***/ }),
5450
- /* 64 */
5377
+ /* 63 */
5451
5378
  /***/ (() => {
5452
5379
 
5453
5380
  const e = up.element;
@@ -5515,7 +5442,7 @@ up.OverlayFocus = class OverlayFocus {
5515
5442
 
5516
5443
 
5517
5444
  /***/ }),
5518
- /* 65 */
5445
+ /* 64 */
5519
5446
  /***/ (() => {
5520
5447
 
5521
5448
  const u = up.util;
@@ -5746,7 +5673,7 @@ up.Params = class Params {
5746
5673
 
5747
5674
 
5748
5675
  /***/ }),
5749
- /* 66 */
5676
+ /* 65 */
5750
5677
  /***/ (() => {
5751
5678
 
5752
5679
  const e = up.element;
@@ -5796,7 +5723,7 @@ up.ProgressBar = class ProgressBar {
5796
5723
 
5797
5724
 
5798
5725
  /***/ }),
5799
- /* 67 */
5726
+ /* 66 */
5800
5727
  /***/ (() => {
5801
5728
 
5802
5729
  const u = up.util;
@@ -5913,7 +5840,7 @@ up.RenderOptions = (function () {
5913
5840
 
5914
5841
 
5915
5842
  /***/ }),
5916
- /* 68 */
5843
+ /* 67 */
5917
5844
  /***/ (() => {
5918
5845
 
5919
5846
  up.RenderResult = class RenderResult extends up.Record {
@@ -5941,7 +5868,7 @@ up.RenderResult = class RenderResult extends up.Record {
5941
5868
 
5942
5869
 
5943
5870
  /***/ }),
5944
- /* 69 */
5871
+ /* 68 */
5945
5872
  /***/ (() => {
5946
5873
 
5947
5874
  var _a;
@@ -5954,7 +5881,7 @@ up.Request = (_a = class Request extends up.Record {
5954
5881
  if (this.wrapMethod == null) {
5955
5882
  this.wrapMethod = up.network.config.wrapMethod;
5956
5883
  }
5957
- this.normalizeForCaching();
5884
+ this.normalize();
5958
5885
  if ((this.target || this.layer || this.origin) && !options.basic) {
5959
5886
  const layerLookupOptions = { origin: this.origin };
5960
5887
  this.layer = up.layer.get(this.layer, layerLookupOptions);
@@ -5966,6 +5893,7 @@ up.Request = (_a = class Request extends up.Record {
5966
5893
  }
5967
5894
  this.deferred = u.newDeferred();
5968
5895
  (_a = this.badResponseTime) !== null && _a !== void 0 ? _a : (this.badResponseTime = u.evalOption(up.network.config.badResponseTime, this));
5896
+ this.addAutoHeaders();
5969
5897
  }
5970
5898
  keys() {
5971
5899
  return [
@@ -5977,7 +5905,6 @@ up.Request = (_a = class Request extends up.Record {
5977
5905
  'failTarget',
5978
5906
  'headers',
5979
5907
  'timeout',
5980
- 'preload',
5981
5908
  'background',
5982
5909
  'cache',
5983
5910
  'expireCache',
@@ -5990,11 +5917,12 @@ up.Request = (_a = class Request extends up.Record {
5990
5917
  'failContext',
5991
5918
  'origin',
5992
5919
  'fragments',
5993
- 'queuedAt',
5920
+ 'builtAt',
5994
5921
  'wrapMethod',
5995
5922
  'contentType',
5996
5923
  'payload',
5997
5924
  'onQueued',
5925
+ 'onLoading',
5998
5926
  'fail',
5999
5927
  'abortable',
6000
5928
  'badResponseTime',
@@ -6005,7 +5933,8 @@ up.Request = (_a = class Request extends up.Record {
6005
5933
  state: 'new',
6006
5934
  abortable: true,
6007
5935
  headers: {},
6008
- timeout: up.network.config.timeout
5936
+ timeout: up.network.config.timeout,
5937
+ builtAt: new Date(),
6009
5938
  };
6010
5939
  }
6011
5940
  get xhr() {
@@ -6028,10 +5957,7 @@ up.Request = (_a = class Request extends up.Record {
6028
5957
  var _a;
6029
5958
  return (_a = this.fragments) === null || _a === void 0 ? void 0 : _a[0];
6030
5959
  }
6031
- followState(sourceRequest) {
6032
- u.delegate(this, ['deferred', 'state', 'preload', 'expired'], () => sourceRequest);
6033
- }
6034
- normalizeForCaching() {
5960
+ normalize() {
6035
5961
  this.method = u.normalizeMethod(this.method);
6036
5962
  this.extractHashFromURL();
6037
5963
  this.transferParamsToURL();
@@ -6078,16 +6004,29 @@ up.Request = (_a = class Request extends up.Record {
6078
6004
  (_a = this.onQueued) === null || _a === void 0 ? void 0 : _a.call(this, this);
6079
6005
  }
6080
6006
  load() {
6007
+ var _a;
6081
6008
  if (this.state !== 'new')
6082
6009
  return;
6083
- this.state = 'loading';
6084
- this.expired = false;
6085
- new up.Request.XHRRenderer(this).buildAndSend({
6086
- onload: () => this.onXHRLoad(),
6087
- onerror: () => this.onXHRError(),
6088
- ontimeout: () => this.onXHRTimeout(),
6089
- onabort: () => this.onXHRAbort()
6090
- });
6010
+ if (this.emitLoad()) {
6011
+ this.state = 'loading';
6012
+ this.normalize();
6013
+ (_a = this.onLoading) === null || _a === void 0 ? void 0 : _a.call(this);
6014
+ this.expired = false;
6015
+ new up.Request.XHRRenderer(this).buildAndSend({
6016
+ onload: () => this.onXHRLoad(),
6017
+ onerror: () => this.onXHRError(),
6018
+ ontimeout: () => this.onXHRTimeout(),
6019
+ onabort: () => this.onXHRAbort()
6020
+ });
6021
+ return true;
6022
+ }
6023
+ else {
6024
+ this.abort({ reason: 'Prevented by event listener' });
6025
+ }
6026
+ }
6027
+ emitLoad() {
6028
+ let event = this.emit('up:request:load', { log: ['Loading %s', this.description] });
6029
+ return !event.defaultPrevented;
6091
6030
  }
6092
6031
  loadPage() {
6093
6032
  up.network.abort();
@@ -6131,18 +6070,19 @@ up.Request = (_a = class Request extends up.Record {
6131
6070
  this.emit('up:request:offline', { log: message });
6132
6071
  }
6133
6072
  respondWith(response) {
6134
- if (this.state !== 'loading')
6073
+ this.response = response;
6074
+ if (this.isSettled())
6135
6075
  return;
6136
6076
  this.state = 'loaded';
6137
6077
  if (response.ok) {
6138
- return this.deferred.resolve(response);
6078
+ this.deferred.resolve(response);
6139
6079
  }
6140
6080
  else {
6141
- return this.deferred.reject(response);
6081
+ this.deferred.reject(response);
6142
6082
  }
6143
6083
  }
6144
6084
  isSettled() {
6145
- return (this.state !== 'new') && (this.state !== 'loading');
6085
+ return (this.state !== 'new') && (this.state !== 'loading') && (this.state !== 'tracking');
6146
6086
  }
6147
6087
  csrfHeader() {
6148
6088
  return up.protocol.csrfHeader();
@@ -6189,24 +6129,6 @@ up.Request = (_a = class Request extends up.Record {
6189
6129
  }
6190
6130
  return new up.Response(responseAttrs);
6191
6131
  }
6192
- cacheKey() {
6193
- return JSON.stringify([
6194
- this.method,
6195
- this.url,
6196
- this.params.toQuery(),
6197
- this.metaProps()
6198
- ]);
6199
- }
6200
- metaProps() {
6201
- const props = {};
6202
- for (let key of u.evalOption(up.network.config.requestMetaKeys, this)) {
6203
- const value = this[key];
6204
- if (u.isGiven(value)) {
6205
- props[key] = value;
6206
- }
6207
- }
6208
- return props;
6209
- }
6210
6132
  buildEventEmitter(args) {
6211
6133
  return up.EventEmitter.fromEmitArgs(args, {
6212
6134
  layer: this.layer,
@@ -6232,9 +6154,27 @@ up.Request = (_a = class Request extends up.Record {
6232
6154
  return u.some(subtreeElements, (subtreeElement) => subtreeElement.contains(fragment));
6233
6155
  });
6234
6156
  }
6235
- get queueAge() {
6236
- const now = new Date();
6237
- return now - this.queuedAt;
6157
+ get age() {
6158
+ return new Date() - this.builtAt;
6159
+ }
6160
+ header(name) {
6161
+ return this.headers[name];
6162
+ }
6163
+ addAutoHeaders() {
6164
+ for (let key of ['target', 'failTarget', 'mode', 'failMode', 'context', 'failContext']) {
6165
+ this.addAutoHeader(up.protocol.headerize(key), this[key]);
6166
+ }
6167
+ let csrfHeader, csrfToken;
6168
+ if ((csrfHeader = this.csrfHeader()) && (csrfToken = this.csrfToken())) {
6169
+ this.addAutoHeader(csrfHeader, csrfToken);
6170
+ }
6171
+ this.addAutoHeader(up.protocol.headerize('version'), up.version);
6172
+ }
6173
+ addAutoHeader(name, value) {
6174
+ if (u.isOptions(value) || u.isArray(value)) {
6175
+ value = u.safeStringifyJSON(value);
6176
+ }
6177
+ this.headers[name] = value;
6238
6178
  }
6239
6179
  static tester(condition, { except } = {}) {
6240
6180
  let testFn;
@@ -6252,8 +6192,7 @@ up.Request = (_a = class Request extends up.Record {
6252
6192
  testFn = (_request) => condition;
6253
6193
  }
6254
6194
  if (except) {
6255
- let exceptCacheKey = except.cacheKey();
6256
- return (request) => (request.cacheKey() !== exceptCacheKey) && testFn(request);
6195
+ return (request) => !up.cache.willHaveSameResponse(request, except) && testFn(request);
6257
6196
  }
6258
6197
  else {
6259
6198
  return testFn;
@@ -6267,39 +6206,158 @@ up.Request = (_a = class Request extends up.Record {
6267
6206
 
6268
6207
 
6269
6208
  /***/ }),
6270
- /* 70 */
6271
- /***/ (() => {
6209
+ /* 69 */
6210
+ /***/ (function() {
6272
6211
 
6273
- let u = up.util;
6274
- up.Request.Cache = class Cache extends up.Cache {
6275
- maxSize() {
6212
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6213
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6214
+ return new (P || (P = Promise))(function (resolve, reject) {
6215
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6216
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6217
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
6218
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
6219
+ });
6220
+ };
6221
+ const u = up.util;
6222
+ up.Request.Cache = class Cache {
6223
+ constructor() {
6224
+ this.reset();
6225
+ }
6226
+ reset() {
6227
+ this.varyInfo = {};
6228
+ this.map = new Map();
6229
+ }
6230
+ cacheKey(request) {
6231
+ let influencingHeaders = this.getPreviousInfluencingHeaders(request);
6232
+ let varyPart = u.flatMap(influencingHeaders, (headerName) => [headerName, request.header(headerName)]);
6233
+ return [request.description, ...varyPart].join(':');
6234
+ }
6235
+ getPreviousInfluencingHeaders(request) {
6236
+ var _a, _b;
6237
+ return ((_a = this.varyInfo)[_b = request.description] || (_a[_b] = new Set()));
6238
+ }
6239
+ get(request) {
6240
+ request = this.wrap(request);
6241
+ let cacheKey = this.cacheKey(request);
6242
+ let cachedRequest = this.map.get(cacheKey);
6243
+ if (cachedRequest) {
6244
+ if (this.isUsable(cachedRequest)) {
6245
+ return cachedRequest;
6246
+ }
6247
+ else {
6248
+ this.map.delete(cacheKey);
6249
+ }
6250
+ }
6251
+ }
6252
+ get capacity() {
6276
6253
  return up.network.config.cacheSize;
6277
6254
  }
6278
- evictAge() {
6279
- return up.network.config.cacheEvictAge;
6255
+ isUsable(request) {
6256
+ return request.age < up.network.config.cacheEvictAge;
6280
6257
  }
6281
- normalizeStoreKey(request) {
6282
- return u.wrapValue(up.Request, request).cacheKey();
6258
+ put(request) {
6259
+ return __awaiter(this, void 0, void 0, function* () {
6260
+ request = this.wrap(request);
6261
+ this.makeRoom();
6262
+ let cacheKey = this.updateCacheKey(request);
6263
+ this.map.set(cacheKey, request);
6264
+ });
6265
+ }
6266
+ updateCacheKey(request) {
6267
+ let oldCacheKey = this.cacheKey(request);
6268
+ let { response } = request;
6269
+ if (response) {
6270
+ this.mergePreviousHeaderNames(request, response);
6271
+ let newCacheKey = this.cacheKey(request);
6272
+ this.renameMapKey(oldCacheKey, newCacheKey);
6273
+ return newCacheKey;
6274
+ }
6275
+ else {
6276
+ return oldCacheKey;
6277
+ }
6278
+ }
6279
+ renameMapKey(oldKey, newKey) {
6280
+ if (oldKey !== newKey && this.map.has(oldKey)) {
6281
+ this.map.set(newKey, this.map.get(oldKey));
6282
+ this.map.delete(oldKey);
6283
+ }
6284
+ }
6285
+ mergePreviousHeaderNames(request, response) {
6286
+ let headersInfluencingResponse = response.ownInfluncingHeaders;
6287
+ if (headersInfluencingResponse.length) {
6288
+ let previousInfluencingHeaders = this.getPreviousInfluencingHeaders(request);
6289
+ for (let headerName of headersInfluencingResponse) {
6290
+ previousInfluencingHeaders.add(headerName);
6291
+ }
6292
+ }
6293
+ }
6294
+ alias(existingCachedRequest, newRequest) {
6295
+ existingCachedRequest = this.wrap(existingCachedRequest);
6296
+ newRequest = this.wrap(newRequest);
6297
+ this.track(existingCachedRequest, newRequest, { force: true });
6298
+ this.put(newRequest);
6299
+ return newRequest;
6300
+ }
6301
+ track(existingRequest, newRequest, options = {}) {
6302
+ var _a;
6303
+ return __awaiter(this, void 0, void 0, function* () {
6304
+ newRequest.trackedRequest = existingRequest;
6305
+ newRequest.state = 'tracking';
6306
+ let value = yield u.always(existingRequest);
6307
+ if (value instanceof up.Response) {
6308
+ if (options.force || this.isCacheCompatible(existingRequest, newRequest)) {
6309
+ newRequest.fromCache = true;
6310
+ newRequest.respondWith(value);
6311
+ u.delegate(newRequest, ['expired', 'state'], () => existingRequest);
6312
+ }
6313
+ else {
6314
+ delete newRequest.trackedRequest;
6315
+ newRequest.state = 'new';
6316
+ (_a = options.onIncompatible) === null || _a === void 0 ? void 0 : _a.call(options, newRequest);
6317
+ }
6318
+ }
6319
+ else {
6320
+ newRequest.state = existingRequest.state;
6321
+ newRequest.deferred.reject(value);
6322
+ }
6323
+ });
6324
+ }
6325
+ willHaveSameResponse(existingRequest, newRequest) {
6326
+ return existingRequest === newRequest || existingRequest === newRequest.trackedRequest;
6327
+ }
6328
+ delete(request) {
6329
+ request = this.wrap(request);
6330
+ let cacheKey = this.cacheKey(request);
6331
+ this.map.delete(cacheKey);
6283
6332
  }
6284
6333
  evict(condition = true, testerOptions) {
6285
- this.eachMatch(condition, testerOptions, ({ key }) => this.map.delete(key));
6334
+ this.eachMatch(condition, testerOptions, (request) => this.delete(request));
6286
6335
  }
6287
6336
  expire(condition = true, testerOptions) {
6288
- this.eachMatch(condition, testerOptions, ({ value: request }) => request.expired = true);
6337
+ this.eachMatch(condition, testerOptions, (request) => request.expired = true);
6338
+ }
6339
+ makeRoom() {
6340
+ while (this.map.size >= this.capacity) {
6341
+ let oldestKey = this.map.keys().next().value;
6342
+ this.map.delete(oldestKey);
6343
+ }
6289
6344
  }
6290
6345
  eachMatch(condition = true, testerOptions, fn) {
6291
6346
  let tester = up.Request.tester(condition, testerOptions);
6292
- for (let record of this.records()) {
6293
- if (tester(record.value)) {
6294
- fn(record);
6295
- }
6296
- }
6347
+ let results = u.filter(this.map.values(), tester);
6348
+ u.each(results, fn);
6349
+ }
6350
+ isCacheCompatible(request1, request2) {
6351
+ return this.cacheKey(request1) === this.cacheKey(request2);
6352
+ }
6353
+ wrap(requestOrOptions) {
6354
+ return u.wrapValue(up.Request, requestOrOptions);
6297
6355
  }
6298
6356
  };
6299
6357
 
6300
6358
 
6301
6359
  /***/ }),
6302
- /* 71 */
6360
+ /* 70 */
6303
6361
  /***/ (() => {
6304
6362
 
6305
6363
  const u = up.util;
@@ -6318,7 +6376,6 @@ up.Request.Queue = class Queue {
6318
6376
  asap(request) {
6319
6377
  request.runQueuedCallbacks();
6320
6378
  u.always(request, responseOrError => this.onRequestSettled(request, responseOrError));
6321
- request.queuedAt = new Date();
6322
6379
  this.scheduleSlowTimer(request);
6323
6380
  this.queueRequest(request);
6324
6381
  u.microtask(() => this.poke());
@@ -6330,7 +6387,7 @@ up.Request.Queue = class Queue {
6330
6387
  }
6331
6388
  }
6332
6389
  scheduleSlowTimer(request) {
6333
- let timeUntilLate = Math.max(request.badResponseTime - request.queueAge, 0);
6390
+ let timeUntilLate = Math.max(request.badResponseTime - request.age, 0);
6334
6391
  u.timer(timeUntilLate, () => this.checkLate());
6335
6392
  }
6336
6393
  getMaxConcurrency() {
@@ -6352,13 +6409,8 @@ up.Request.Queue = class Queue {
6352
6409
  return u.remove(this.queuedRequests, request);
6353
6410
  }
6354
6411
  sendRequestNow(request) {
6355
- if (request.emit('up:request:load', { log: ['Loading %s %s', request.method, request.url] }).defaultPrevented) {
6356
- request.abort({ reason: 'Prevented by event listener' });
6357
- }
6358
- else {
6359
- request.normalizeForCaching();
6412
+ if (request.load()) {
6360
6413
  this.currentRequests.push(request);
6361
- request.load();
6362
6414
  }
6363
6415
  }
6364
6416
  onRequestSettled(request, responseOrError) {
@@ -6408,13 +6460,13 @@ up.Request.Queue = class Queue {
6408
6460
  isLate() {
6409
6461
  const allForegroundRequests = u.reject(this.allRequests, 'background');
6410
6462
  const timerTolerance = 1;
6411
- return u.some(allForegroundRequests, request => request.queueAge >= (request.badResponseTime - timerTolerance));
6463
+ return u.some(allForegroundRequests, (request) => request.age >= (request.badResponseTime - timerTolerance));
6412
6464
  }
6413
6465
  };
6414
6466
 
6415
6467
 
6416
6468
  /***/ }),
6417
- /* 72 */
6469
+ /* 71 */
6418
6470
  /***/ (() => {
6419
6471
 
6420
6472
  const u = up.util;
@@ -6453,7 +6505,7 @@ up.Request.FormRenderer = class FormRenderer {
6453
6505
 
6454
6506
 
6455
6507
  /***/ }),
6456
- /* 73 */
6508
+ /* 72 */
6457
6509
  /***/ (() => {
6458
6510
 
6459
6511
  var _a;
@@ -6471,21 +6523,13 @@ up.Request.XHRRenderer = (_a = class XHRRenderer {
6471
6523
  xhr.timeout = this.request.timeout;
6472
6524
  }
6473
6525
  xhr.open(this.getMethod(), this.request.url);
6474
- const metaProps = this.request.metaProps();
6475
- for (let key in metaProps) {
6476
- this.addHeader(xhr, up.protocol.headerize(key), metaProps[key]);
6477
- }
6478
- for (let header in this.request.headers) {
6479
- this.addHeader(xhr, header, this.request.headers[header]);
6480
- }
6481
- let csrfHeader, csrfToken;
6482
- if ((csrfHeader = this.request.csrfHeader()) && (csrfToken = this.request.csrfToken())) {
6483
- this.addHeader(xhr, csrfHeader, csrfToken);
6484
- }
6485
- this.addHeader(xhr, up.protocol.headerize('version'), up.version);
6486
6526
  let contentType = this.getContentType();
6487
6527
  if (contentType) {
6488
- this.addHeader(xhr, 'Content-Type', contentType);
6528
+ xhr.setRequestHeader('Content-Type', contentType);
6529
+ }
6530
+ for (let headerName in this.request.headers) {
6531
+ let headerValue = this.request.headers[headerName];
6532
+ xhr.setRequestHeader(headerName, headerValue);
6489
6533
  }
6490
6534
  Object.assign(xhr, handlers);
6491
6535
  xhr.send(this.getPayload());
@@ -6507,12 +6551,6 @@ up.Request.XHRRenderer = (_a = class XHRRenderer {
6507
6551
  this.finalizePayload();
6508
6552
  return this.payload;
6509
6553
  }
6510
- addHeader(xhr, header, value) {
6511
- if (u.isOptions(value) || u.isArray(value)) {
6512
- value = JSON.stringify(value);
6513
- }
6514
- xhr.setRequestHeader(header, value);
6515
- }
6516
6554
  finalizePayload() {
6517
6555
  this.payload = this.request.payload;
6518
6556
  this.contentType = this.request.contentType;
@@ -6539,7 +6577,7 @@ up.Request.XHRRenderer = (_a = class XHRRenderer {
6539
6577
 
6540
6578
 
6541
6579
  /***/ }),
6542
- /* 74 */
6580
+ /* 73 */
6543
6581
  /***/ (() => {
6544
6582
 
6545
6583
  const u = up.util;
@@ -6579,6 +6617,10 @@ up.Response = class Response extends up.Record {
6579
6617
  var _a;
6580
6618
  return this.headers[name] || ((_a = this.xhr) === null || _a === void 0 ? void 0 : _a.getResponseHeader(name));
6581
6619
  }
6620
+ get ownInfluncingHeaders() {
6621
+ let influencingHeaders = up.protocol.influencingHeadersFromResponse(this);
6622
+ return u.filter(influencingHeaders, (headerName) => this.request.header(headerName));
6623
+ }
6582
6624
  get contentType() {
6583
6625
  return this.header('Content-Type');
6584
6626
  }
@@ -6612,7 +6654,7 @@ up.Response = class Response extends up.Record {
6612
6654
 
6613
6655
 
6614
6656
  /***/ }),
6615
- /* 75 */
6657
+ /* 74 */
6616
6658
  /***/ (() => {
6617
6659
 
6618
6660
  var _a;
@@ -6620,12 +6662,13 @@ const u = up.util;
6620
6662
  const e = up.element;
6621
6663
  up.ResponseDoc = (_a = class ResponseDoc {
6622
6664
  constructor(options) {
6623
- this.noscriptWrapper = new up.HTMLWrapper('noscript');
6624
- this.scriptWrapper = new up.HTMLWrapper('script');
6625
6665
  this.root =
6626
6666
  this.parseDocument(options) ||
6627
6667
  this.parseFragment(options) ||
6628
6668
  this.parseContent(options);
6669
+ if (!up.fragment.config.runScripts) {
6670
+ this.root.querySelectorAll('script').forEach((e) => e.remove());
6671
+ }
6629
6672
  this.cspNonces = options.cspNonces;
6630
6673
  if (options.origin) {
6631
6674
  let originSelector = up.fragment.tryToTarget(options.origin);
@@ -6635,7 +6678,11 @@ up.ResponseDoc = (_a = class ResponseDoc {
6635
6678
  }
6636
6679
  }
6637
6680
  parseDocument(options) {
6638
- return this.parse(options.document, e.createDocumentFromHTML);
6681
+ let document = this.parse(options.document, e.createBrokenDocumentFromHTML);
6682
+ if (document) {
6683
+ this.scriptishNeedFix = true;
6684
+ return document;
6685
+ }
6639
6686
  }
6640
6687
  parseContent(options) {
6641
6688
  let content = options.content || '';
@@ -6643,7 +6690,6 @@ up.ResponseDoc = (_a = class ResponseDoc {
6643
6690
  target = u.map(up.fragment.parseTargetSteps(target), 'selector').join(',');
6644
6691
  const matchingElement = e.createFromSelector(target);
6645
6692
  if (u.isString(content)) {
6646
- content = this.wrapHTML(content);
6647
6693
  matchingElement.innerHTML = content;
6648
6694
  }
6649
6695
  else {
@@ -6656,7 +6702,6 @@ up.ResponseDoc = (_a = class ResponseDoc {
6656
6702
  }
6657
6703
  parse(value, parseFn = e.createFromHTML) {
6658
6704
  if (u.isString(value)) {
6659
- value = this.wrapHTML(value);
6660
6705
  value = parseFn(value);
6661
6706
  }
6662
6707
  return value;
@@ -6664,19 +6709,9 @@ up.ResponseDoc = (_a = class ResponseDoc {
6664
6709
  rootSelector() {
6665
6710
  return up.fragment.toTarget(this.root);
6666
6711
  }
6667
- wrapHTML(html) {
6668
- html = this.noscriptWrapper.wrap(html);
6669
- if (up.fragment.config.runScripts) {
6670
- html = this.scriptWrapper.wrap(html);
6671
- }
6672
- else {
6673
- html = this.scriptWrapper.strip(html);
6674
- }
6675
- return html;
6676
- }
6677
6712
  getTitle() {
6678
6713
  var _a;
6679
- return (_a = this.root.querySelector("head title")) === null || _a === void 0 ? void 0 : _a.textContent;
6714
+ return (_a = this.root.querySelector('head title')) === null || _a === void 0 ? void 0 : _a.textContent;
6680
6715
  }
6681
6716
  select(selector) {
6682
6717
  let finder = new up.FragmentFinder({
@@ -6687,9 +6722,10 @@ up.ResponseDoc = (_a = class ResponseDoc {
6687
6722
  return finder.find();
6688
6723
  }
6689
6724
  finalizeElement(element) {
6690
- this.noscriptWrapper.unwrap(element);
6691
6725
  up.NonceableCallback.adoptNonces(element, this.cspNonces);
6692
- this.scriptWrapper.unwrap(element);
6726
+ if (this.scriptishNeedFix) {
6727
+ element.querySelectorAll('noscript, script').forEach(e.fixScriptish);
6728
+ }
6693
6729
  }
6694
6730
  },
6695
6731
  (() => {
@@ -6699,7 +6735,7 @@ up.ResponseDoc = (_a = class ResponseDoc {
6699
6735
 
6700
6736
 
6701
6737
  /***/ }),
6702
- /* 76 */
6738
+ /* 75 */
6703
6739
  /***/ (() => {
6704
6740
 
6705
6741
  const e = up.element;
@@ -6794,7 +6830,7 @@ up.RevealMotion = class RevealMotion {
6794
6830
 
6795
6831
 
6796
6832
  /***/ }),
6797
- /* 77 */
6833
+ /* 76 */
6798
6834
  /***/ (() => {
6799
6835
 
6800
6836
  const u = up.util;
@@ -6835,7 +6871,7 @@ up.Selector = class Selector {
6835
6871
 
6836
6872
 
6837
6873
  /***/ }),
6838
- /* 78 */
6874
+ /* 77 */
6839
6875
  /***/ (() => {
6840
6876
 
6841
6877
  const u = up.util;
@@ -6956,7 +6992,7 @@ up.Tether = class Tether {
6956
6992
 
6957
6993
 
6958
6994
  /***/ }),
6959
- /* 79 */
6995
+ /* 78 */
6960
6996
  /***/ (() => {
6961
6997
 
6962
6998
  const u = up.util;
@@ -7037,7 +7073,7 @@ up.URLPattern = class URLPattern {
7037
7073
 
7038
7074
 
7039
7075
  /***/ }),
7040
- /* 80 */
7076
+ /* 79 */
7041
7077
  /***/ (() => {
7042
7078
 
7043
7079
  up.framework = (function () {
@@ -7121,7 +7157,7 @@ up.boot = up.framework.boot;
7121
7157
 
7122
7158
 
7123
7159
  /***/ }),
7124
- /* 81 */
7160
+ /* 80 */
7125
7161
  /***/ (() => {
7126
7162
 
7127
7163
  up.event = (function () {
@@ -7224,7 +7260,7 @@ up.emit = up.event.emit;
7224
7260
 
7225
7261
 
7226
7262
  /***/ }),
7227
- /* 82 */
7263
+ /* 81 */
7228
7264
  /***/ (() => {
7229
7265
 
7230
7266
  up.protocol = (function () {
@@ -7240,6 +7276,9 @@ up.protocol = (function () {
7240
7276
  return parseFn(value);
7241
7277
  }
7242
7278
  };
7279
+ function targetFromXHR(xhr) {
7280
+ return extractHeader(xhr, 'target');
7281
+ }
7243
7282
  function parseModifyCacheValue(value) {
7244
7283
  if (value === 'false') {
7245
7284
  return false;
@@ -7261,6 +7300,10 @@ up.protocol = (function () {
7261
7300
  function methodFromXHR(xhr) {
7262
7301
  return extractHeader(xhr, 'method', u.normalizeMethod);
7263
7302
  }
7303
+ function titleFromXHR(xhr) {
7304
+ var _a, _b, _c;
7305
+ return (_c = (_b = (_a = up.migrate).titleFromXHR) === null || _b === void 0 ? void 0 : _b.call(_a, xhr)) !== null && _c !== void 0 ? _c : extractHeader(xhr, 'title', JSON.parse);
7306
+ }
7264
7307
  function eventPlansFromXHR(xhr) {
7265
7308
  return extractHeader(xhr, 'events', JSON.parse);
7266
7309
  }
@@ -7276,11 +7319,9 @@ up.protocol = (function () {
7276
7319
  function locationFromXHR(xhr) {
7277
7320
  return extractHeader(xhr, 'location') || xhr.responseURL;
7278
7321
  }
7279
- function titleFromXHR(xhr) {
7280
- return extractHeader(xhr, 'title');
7281
- }
7282
- function targetFromXHR(xhr) {
7283
- return extractHeader(xhr, 'target');
7322
+ function influencingHeadersFromResponse(response) {
7323
+ let varyHeaderValue = response.header('Vary');
7324
+ return u.parseTokens(varyHeaderValue, { separator: 'comma' });
7284
7325
  }
7285
7326
  const config = new up.Config(() => ({
7286
7327
  methodParam: '_method',
@@ -7356,12 +7397,13 @@ up.protocol = (function () {
7356
7397
  headerize,
7357
7398
  wrapMethod,
7358
7399
  cspNoncesFromHeader,
7400
+ influencingHeadersFromResponse,
7359
7401
  };
7360
7402
  })();
7361
7403
 
7362
7404
 
7363
7405
  /***/ }),
7364
- /* 83 */
7406
+ /* 82 */
7365
7407
  /***/ (() => {
7366
7408
 
7367
7409
  up.log = (function () {
@@ -7447,7 +7489,7 @@ up.warn = up.log.warn;
7447
7489
 
7448
7490
 
7449
7491
  /***/ }),
7450
- /* 84 */
7492
+ /* 83 */
7451
7493
  /***/ (() => {
7452
7494
 
7453
7495
  up.syntax = (function () {
@@ -7593,7 +7635,7 @@ up.hello = up.syntax.hello;
7593
7635
 
7594
7636
 
7595
7637
  /***/ }),
7596
- /* 85 */
7638
+ /* 84 */
7597
7639
  /***/ (() => {
7598
7640
 
7599
7641
  up.history = (function () {
@@ -7663,7 +7705,7 @@ up.history = (function () {
7663
7705
  }
7664
7706
  function restoreStateOnPop(state) {
7665
7707
  if (!(state === null || state === void 0 ? void 0 : state.up)) {
7666
- up.puts('pop', 'Ignoring a history state not owned by Unpoly');
7708
+ up.puts('popstate', 'Ignoring a history state not owned by Unpoly');
7667
7709
  return;
7668
7710
  }
7669
7711
  let location = currentLocation();
@@ -7730,10 +7772,10 @@ up.history = (function () {
7730
7772
 
7731
7773
 
7732
7774
  /***/ }),
7733
- /* 86 */
7775
+ /* 85 */
7734
7776
  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
7735
7777
 
7736
- __webpack_require__(87);
7778
+ __webpack_require__(86);
7737
7779
  const u = up.util;
7738
7780
  const e = up.element;
7739
7781
  up.fragment = (function () {
@@ -7784,7 +7826,7 @@ up.fragment = (function () {
7784
7826
  autoRevalidate: (response) => response.expired,
7785
7827
  skipResponse: defaultSkipResponse
7786
7828
  }));
7787
- u.delegate(config, 'mainTargets', () => up.layer.config.any);
7829
+ u.delegate(config, ['mainTargets'], () => up.layer.config.any);
7788
7830
  function reset() {
7789
7831
  config.reset();
7790
7832
  }
@@ -8251,20 +8293,20 @@ up.destroy = up.fragment.destroy;
8251
8293
  up.render = up.fragment.render;
8252
8294
  up.navigate = up.fragment.navigate;
8253
8295
  up.visit = up.fragment.visit;
8254
- u.delegate(up, 'context', () => up.layer.current);
8296
+ u.delegate(up, ['context'], () => up.layer.current);
8255
8297
 
8256
8298
 
8257
8299
  /***/ }),
8258
- /* 87 */
8300
+ /* 86 */
8259
8301
  /***/ (() => {
8260
8302
 
8261
8303
 
8262
8304
 
8263
8305
  /***/ }),
8264
- /* 88 */
8306
+ /* 87 */
8265
8307
  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
8266
8308
 
8267
- __webpack_require__(89);
8309
+ __webpack_require__(88);
8268
8310
  up.viewport = (function () {
8269
8311
  const u = up.util;
8270
8312
  const e = up.element;
@@ -8447,7 +8489,7 @@ up.viewport = (function () {
8447
8489
  }
8448
8490
  }
8449
8491
  function newStateCache() {
8450
- return new up.Cache({ size: 30, key: up.history.normalizeURL });
8492
+ return new up.FIFOCache({ capacity: 30, normalizeKey: up.history.normalizeURL });
8451
8493
  }
8452
8494
  function parseOptions(args) {
8453
8495
  const options = u.copy(u.extractOptions(args));
@@ -8586,13 +8628,13 @@ up.reveal = up.viewport.reveal;
8586
8628
 
8587
8629
 
8588
8630
  /***/ }),
8589
- /* 89 */
8631
+ /* 88 */
8590
8632
  /***/ (() => {
8591
8633
 
8592
8634
 
8593
8635
 
8594
8636
  /***/ }),
8595
- /* 90 */
8637
+ /* 89 */
8596
8638
  /***/ (function() {
8597
8639
 
8598
8640
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -8858,10 +8900,10 @@ up.animate = up.motion.animate;
8858
8900
 
8859
8901
 
8860
8902
  /***/ }),
8861
- /* 91 */
8903
+ /* 90 */
8862
8904
  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
8863
8905
 
8864
- __webpack_require__(92);
8906
+ __webpack_require__(91);
8865
8907
  const u = up.util;
8866
8908
  up.network = (function () {
8867
8909
  const config = new up.Config(() => ({
@@ -8877,7 +8919,6 @@ up.network = (function () {
8877
8919
  autoCache(request) { return request.isSafe(); },
8878
8920
  expireCache(request, _response) { return !request.isSafe(); },
8879
8921
  evictCache: false,
8880
- requestMetaKeys: ['target', 'failTarget', 'mode', 'failMode', 'context', 'failContext'],
8881
8922
  progressBar: true,
8882
8923
  timeout: 90000,
8883
8924
  }));
@@ -8888,14 +8929,14 @@ up.network = (function () {
8888
8929
  abortRequests();
8889
8930
  queue.reset();
8890
8931
  config.reset();
8891
- cache.evict();
8932
+ cache.reset();
8892
8933
  progressBar === null || progressBar === void 0 ? void 0 : progressBar.destroy();
8893
8934
  progressBar = null;
8894
8935
  }
8895
8936
  function makeRequest(...args) {
8896
8937
  const options = parseRequestOptions(args);
8897
8938
  const request = new up.Request(options);
8898
- useCachedRequest(request) || queueRequest(request);
8939
+ processRequest(request);
8899
8940
  return request;
8900
8941
  }
8901
8942
  function parseRequestOptions(args) {
@@ -8907,31 +8948,31 @@ up.network = (function () {
8907
8948
  (_b = (_a = up.migrate).handleRequestOptions) === null || _b === void 0 ? void 0 : _b.call(_a, options);
8908
8949
  return options;
8909
8950
  }
8910
- function useCachedRequest(request) {
8951
+ function processRequest(request) {
8952
+ useCachedRequest(request) || queueRequest(request);
8953
+ }
8954
+ function useCachedRequest(newRequest) {
8911
8955
  let cachedRequest;
8912
- if (request.willCache() && (cachedRequest = cache.get(request))) {
8913
- up.puts('up.request()', 'Re-using previous request to %s %s', request.method, request.url);
8914
- if (!request.preload) {
8956
+ if (newRequest.willCache() && (cachedRequest = cache.get(newRequest))) {
8957
+ up.puts('up.request()', 'Re-using previous request to %s', newRequest.description);
8958
+ if (!newRequest.background) {
8915
8959
  queue.promoteToForeground(cachedRequest);
8916
8960
  }
8917
- request.followState(cachedRequest);
8918
- request.fromCache = true;
8961
+ cache.track(cachedRequest, newRequest, { onIncompatible: processRequest });
8919
8962
  return true;
8920
8963
  }
8921
8964
  }
8922
8965
  function queueRequest(request) {
8923
- if (request.preload && !request.isSafe()) {
8924
- up.fail('Will not preload request to %s', request.description);
8925
- }
8926
8966
  handleCaching(request);
8927
8967
  queue.asap(request);
8928
8968
  return true;
8929
8969
  }
8930
8970
  function handleCaching(request) {
8931
8971
  if (request.willCache()) {
8932
- cache.set(request, request);
8972
+ cache.put(request);
8973
+ request.onLoading = () => cache.put(request);
8933
8974
  }
8934
- return u.always(request, function (response) {
8975
+ u.always(request, function (response) {
8935
8976
  var _a, _b, _c, _d;
8936
8977
  let expireCache = (_b = (_a = response.expireCache) !== null && _a !== void 0 ? _a : request.expireCache) !== null && _b !== void 0 ? _b : u.evalOption(config.expireCache, request, response);
8937
8978
  if (expireCache) {
@@ -8942,7 +8983,7 @@ up.network = (function () {
8942
8983
  cache.evict(evictCache, { except: request });
8943
8984
  }
8944
8985
  if (cache.get(request)) {
8945
- cache.set(request, request);
8986
+ cache.put(request);
8946
8987
  }
8947
8988
  if (!response.ok) {
8948
8989
  cache.evict(request);
@@ -9008,13 +9049,13 @@ up.cache = up.network.cache;
9008
9049
 
9009
9050
 
9010
9051
  /***/ }),
9011
- /* 92 */
9052
+ /* 91 */
9012
9053
  /***/ (() => {
9013
9054
 
9014
9055
 
9015
9056
 
9016
9057
  /***/ }),
9017
- /* 93 */
9058
+ /* 92 */
9018
9059
  /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
9019
9060
 
9020
9061
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -9026,7 +9067,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9026
9067
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9027
9068
  });
9028
9069
  };
9029
- __webpack_require__(94);
9070
+ __webpack_require__(93);
9030
9071
  const u = up.util;
9031
9072
  const e = up.element;
9032
9073
  up.layer = (function () {
@@ -9267,16 +9308,16 @@ up.layer = (function () {
9267
9308
 
9268
9309
 
9269
9310
  /***/ }),
9270
- /* 94 */
9311
+ /* 93 */
9271
9312
  /***/ (() => {
9272
9313
 
9273
9314
 
9274
9315
 
9275
9316
  /***/ }),
9276
- /* 95 */
9317
+ /* 94 */
9277
9318
  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
9278
9319
 
9279
- __webpack_require__(96);
9320
+ __webpack_require__(95);
9280
9321
  up.link = (function () {
9281
9322
  const u = up.util;
9282
9323
  const e = up.element;
@@ -9425,16 +9466,22 @@ up.link = (function () {
9425
9466
  }
9426
9467
  function preload(link, options) {
9427
9468
  link = up.fragment.get(link);
9428
- if (!shouldPreload()) {
9429
- return Promise.reject(new up.Error('Link preloading is disabled'));
9469
+ let issue = preloadIssue(link);
9470
+ if (issue) {
9471
+ return Promise.reject(new up.Error(issue));
9430
9472
  }
9431
9473
  const guardEvent = up.event.build('up:link:preload', { log: ['Preloading link %o', link] });
9432
9474
  return follow(link, Object.assign(Object.assign({ abortable: false }, options), { guardEvent, preload: true }));
9433
9475
  }
9434
- function shouldPreload() {
9435
- let goodConnection = u.negate(up.network.shouldReduceRequests);
9436
- return u.evalAutoOption(config.preloadEnabled, goodConnection);
9476
+ function preloadIssue(link) {
9477
+ if (!u.evalAutoOption(config.preloadEnabled, autoPreloadEnabled, link)) {
9478
+ return 'Preloading is disabled';
9479
+ }
9480
+ else if (!isSafe(link)) {
9481
+ return 'Will not preload an unsafe link';
9482
+ }
9437
9483
  }
9484
+ const autoPreloadEnabled = u.negate(up.network.shouldReduceRequests);
9438
9485
  function followMethod(link, options = {}) {
9439
9486
  return u.normalizeMethod(options.method || link.getAttribute('up-method') || link.getAttribute('data-method'));
9440
9487
  }
@@ -9561,13 +9608,13 @@ up.follow = up.link.follow;
9561
9608
 
9562
9609
 
9563
9610
  /***/ }),
9564
- /* 96 */
9611
+ /* 95 */
9565
9612
  /***/ (() => {
9566
9613
 
9567
9614
 
9568
9615
 
9569
9616
  /***/ }),
9570
- /* 97 */
9617
+ /* 96 */
9571
9618
  /***/ (() => {
9572
9619
 
9573
9620
  up.form = (function () {
@@ -9967,7 +10014,7 @@ up.validate = up.form.validate;
9967
10014
 
9968
10015
 
9969
10016
  /***/ }),
9970
- /* 98 */
10017
+ /* 97 */
9971
10018
  /***/ (() => {
9972
10019
 
9973
10020
  up.feedback = (function () {
@@ -10084,7 +10131,7 @@ up.feedback = (function () {
10084
10131
 
10085
10132
 
10086
10133
  /***/ }),
10087
- /* 99 */
10134
+ /* 98 */
10088
10135
  /***/ (() => {
10089
10136
 
10090
10137
  up.radio = (function () {
@@ -10162,7 +10209,7 @@ up.radio = (function () {
10162
10209
 
10163
10210
 
10164
10211
  /***/ }),
10165
- /* 100 */
10212
+ /* 99 */
10166
10213
  /***/ (() => {
10167
10214
 
10168
10215
  (function () {
@@ -10300,16 +10347,15 @@ __webpack_require__(82);
10300
10347
  __webpack_require__(83);
10301
10348
  __webpack_require__(84);
10302
10349
  __webpack_require__(85);
10303
- __webpack_require__(86);
10304
- __webpack_require__(88);
10350
+ __webpack_require__(87);
10351
+ __webpack_require__(89);
10305
10352
  __webpack_require__(90);
10306
- __webpack_require__(91);
10307
- __webpack_require__(93);
10308
- __webpack_require__(95);
10353
+ __webpack_require__(92);
10354
+ __webpack_require__(94);
10355
+ __webpack_require__(96);
10309
10356
  __webpack_require__(97);
10310
10357
  __webpack_require__(98);
10311
10358
  __webpack_require__(99);
10312
- __webpack_require__(100);
10313
10359
  up.framework.onEvaled();
10314
10360
 
10315
10361
  })();