unpoly-rails 2.7.2.1 → 2.7.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 17aae8ae028ba49402b7b5544ad8498af55fae1c17d606883f522e14d84d7727
4
- data.tar.gz: 6f819af3aa0339f9c3a3c63836a6dfde27d019d51a795dc8aa16800560e7082a
3
+ metadata.gz: 78ae8255389adf6764d3bb943b4b3f1e5a5d8a31bc7f2ad01799ba683be9ea56
4
+ data.tar.gz: b5c00aa016a7a178d855018db1491fa32b45316bd64457704657bf7ad2c98e59
5
5
  SHA512:
6
- metadata.gz: af953dbde16013e047641a4801398595b6e9c6c1d5394ff614083bac5aa3289f70ebbf810a58f031545092672f57129736007a6aaef238d38d11f9b0c73edd8d
7
- data.tar.gz: 44694a2cf5d4d5c5510f136be407d79601093d2a5dbef375b4f8500c72099c178931c5d6f33d1da86c1e5dbd648be71a0809c1b870b1b6ff49c90d63465e8840
6
+ metadata.gz: 30506f67b5ea32e55f66fa3a749e1aaeee0a5fbb5eb62064044288b20da573197f79aa79e6cd4a3bc542c5d9b6c0f948b57a18cc5c004cdce1fdd08b347b7109
7
+ data.tar.gz: 797a38f17df02e60213e95d68657f3f838c27a62a962eb6787d13770c38ddbd4e66018a53c62b0fc9db27a0faa6524ede38b54d1d2b306ee86899eaaf40877e7
@@ -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
  }
@@ -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,
@@ -4161,44 +4182,6 @@ up.FragmentScrolling = class FragmentScrolling extends up.FragmentProcessor {
4161
4182
  /* 47 */
4162
4183
  /***/ (() => {
4163
4184
 
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
4185
  const e = up.element;
4203
4186
  const u = up.util;
4204
4187
  up.Layer = class Layer extends up.Record {
@@ -4416,7 +4399,7 @@ up.Layer = class Layer extends up.Record {
4416
4399
 
4417
4400
 
4418
4401
  /***/ }),
4419
- /* 49 */
4402
+ /* 48 */
4420
4403
  /***/ (() => {
4421
4404
 
4422
4405
  const e = up.element;
@@ -4696,7 +4679,7 @@ up.Layer.Overlay = class Overlay extends up.Layer {
4696
4679
 
4697
4680
 
4698
4681
  /***/ }),
4699
- /* 50 */
4682
+ /* 49 */
4700
4683
  /***/ (() => {
4701
4684
 
4702
4685
  up.Layer.OverlayWithTether = class OverlayWithTether extends up.Layer.Overlay {
@@ -4733,7 +4716,7 @@ up.Layer.OverlayWithTether = class OverlayWithTether extends up.Layer.Overlay {
4733
4716
 
4734
4717
 
4735
4718
  /***/ }),
4736
- /* 51 */
4719
+ /* 50 */
4737
4720
  /***/ (() => {
4738
4721
 
4739
4722
  var _a;
@@ -4771,7 +4754,7 @@ up.Layer.OverlayWithViewport = (_a = class OverlayWithViewport extends up.Layer.
4771
4754
 
4772
4755
 
4773
4756
  /***/ }),
4774
- /* 52 */
4757
+ /* 51 */
4775
4758
  /***/ (() => {
4776
4759
 
4777
4760
  var _a;
@@ -4820,7 +4803,7 @@ up.Layer.Root = (_a = class Root extends up.Layer {
4820
4803
 
4821
4804
 
4822
4805
  /***/ }),
4823
- /* 53 */
4806
+ /* 52 */
4824
4807
  /***/ (() => {
4825
4808
 
4826
4809
  var _a;
@@ -4831,7 +4814,7 @@ up.Layer.Modal = (_a = class Modal extends up.Layer.OverlayWithViewport {
4831
4814
 
4832
4815
 
4833
4816
  /***/ }),
4834
- /* 54 */
4817
+ /* 53 */
4835
4818
  /***/ (() => {
4836
4819
 
4837
4820
  var _a;
@@ -4842,7 +4825,7 @@ up.Layer.Popup = (_a = class Popup extends up.Layer.OverlayWithTether {
4842
4825
 
4843
4826
 
4844
4827
  /***/ }),
4845
- /* 55 */
4828
+ /* 54 */
4846
4829
  /***/ (() => {
4847
4830
 
4848
4831
  var _a;
@@ -4853,7 +4836,7 @@ up.Layer.Drawer = (_a = class Drawer extends up.Layer.OverlayWithViewport {
4853
4836
 
4854
4837
 
4855
4838
  /***/ }),
4856
- /* 56 */
4839
+ /* 55 */
4857
4840
  /***/ (() => {
4858
4841
 
4859
4842
  var _a;
@@ -4864,7 +4847,7 @@ up.Layer.Cover = (_a = class Cover extends up.Layer.OverlayWithViewport {
4864
4847
 
4865
4848
 
4866
4849
  /***/ }),
4867
- /* 57 */
4850
+ /* 56 */
4868
4851
  /***/ (() => {
4869
4852
 
4870
4853
  const u = up.util;
@@ -4954,7 +4937,7 @@ up.LayerLookup = class LayerLookup {
4954
4937
 
4955
4938
 
4956
4939
  /***/ }),
4957
- /* 58 */
4940
+ /* 57 */
4958
4941
  /***/ (() => {
4959
4942
 
4960
4943
  const u = up.util;
@@ -5067,7 +5050,7 @@ up.LayerStack = class LayerStack extends Array {
5067
5050
 
5068
5051
 
5069
5052
  /***/ }),
5070
- /* 59 */
5053
+ /* 58 */
5071
5054
  /***/ (() => {
5072
5055
 
5073
5056
  up.LinkFeedbackURLs = class LinkFeedbackURLs {
@@ -5098,7 +5081,7 @@ up.LinkFeedbackURLs = class LinkFeedbackURLs {
5098
5081
 
5099
5082
 
5100
5083
  /***/ }),
5101
- /* 60 */
5084
+ /* 59 */
5102
5085
  /***/ (() => {
5103
5086
 
5104
5087
  const u = up.util;
@@ -5168,7 +5151,7 @@ up.LinkPreloader = class LinkPreloader {
5168
5151
 
5169
5152
 
5170
5153
  /***/ }),
5171
- /* 61 */
5154
+ /* 60 */
5172
5155
  /***/ (function() {
5173
5156
 
5174
5157
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -5277,7 +5260,7 @@ up.MotionController = class MotionController {
5277
5260
 
5278
5261
 
5279
5262
  /***/ }),
5280
- /* 62 */
5263
+ /* 61 */
5281
5264
  /***/ (() => {
5282
5265
 
5283
5266
  const u = up.util;
@@ -5369,7 +5352,7 @@ up.NonceableCallback = class NonceableCallback {
5369
5352
 
5370
5353
 
5371
5354
  /***/ }),
5372
- /* 63 */
5355
+ /* 62 */
5373
5356
  /***/ (() => {
5374
5357
 
5375
5358
  const u = up.util;
@@ -5447,7 +5430,7 @@ up.OptionsParser = class OptionsParser {
5447
5430
 
5448
5431
 
5449
5432
  /***/ }),
5450
- /* 64 */
5433
+ /* 63 */
5451
5434
  /***/ (() => {
5452
5435
 
5453
5436
  const e = up.element;
@@ -5515,7 +5498,7 @@ up.OverlayFocus = class OverlayFocus {
5515
5498
 
5516
5499
 
5517
5500
  /***/ }),
5518
- /* 65 */
5501
+ /* 64 */
5519
5502
  /***/ (() => {
5520
5503
 
5521
5504
  const u = up.util;
@@ -5746,7 +5729,7 @@ up.Params = class Params {
5746
5729
 
5747
5730
 
5748
5731
  /***/ }),
5749
- /* 66 */
5732
+ /* 65 */
5750
5733
  /***/ (() => {
5751
5734
 
5752
5735
  const e = up.element;
@@ -5796,7 +5779,7 @@ up.ProgressBar = class ProgressBar {
5796
5779
 
5797
5780
 
5798
5781
  /***/ }),
5799
- /* 67 */
5782
+ /* 66 */
5800
5783
  /***/ (() => {
5801
5784
 
5802
5785
  const u = up.util;
@@ -5913,7 +5896,7 @@ up.RenderOptions = (function () {
5913
5896
 
5914
5897
 
5915
5898
  /***/ }),
5916
- /* 68 */
5899
+ /* 67 */
5917
5900
  /***/ (() => {
5918
5901
 
5919
5902
  up.RenderResult = class RenderResult extends up.Record {
@@ -5941,7 +5924,7 @@ up.RenderResult = class RenderResult extends up.Record {
5941
5924
 
5942
5925
 
5943
5926
  /***/ }),
5944
- /* 69 */
5927
+ /* 68 */
5945
5928
  /***/ (() => {
5946
5929
 
5947
5930
  var _a;
@@ -5966,6 +5949,7 @@ up.Request = (_a = class Request extends up.Record {
5966
5949
  }
5967
5950
  this.deferred = u.newDeferred();
5968
5951
  (_a = this.badResponseTime) !== null && _a !== void 0 ? _a : (this.badResponseTime = u.evalOption(up.network.config.badResponseTime, this));
5952
+ this.uid = u.uid();
5969
5953
  }
5970
5954
  keys() {
5971
5955
  return [
@@ -6028,9 +6012,6 @@ up.Request = (_a = class Request extends up.Record {
6028
6012
  var _a;
6029
6013
  return (_a = this.fragments) === null || _a === void 0 ? void 0 : _a[0];
6030
6014
  }
6031
- followState(sourceRequest) {
6032
- u.delegate(this, ['deferred', 'state', 'preload', 'expired'], () => sourceRequest);
6033
- }
6034
6015
  normalizeForCaching() {
6035
6016
  this.method = u.normalizeMethod(this.method);
6036
6017
  this.extractHashFromURL();
@@ -6074,10 +6055,12 @@ up.Request = (_a = class Request extends up.Record {
6074
6055
  }
6075
6056
  runQueuedCallbacks() {
6076
6057
  var _a;
6058
+ this.queuedAt = new Date();
6077
6059
  u.always(this, () => this.evictExpensiveAttrs());
6078
6060
  (_a = this.onQueued) === null || _a === void 0 ? void 0 : _a.call(this, this);
6079
6061
  }
6080
6062
  load() {
6063
+ console.debug("[request] calling load() on %o", this.description);
6081
6064
  if (this.state !== 'new')
6082
6065
  return;
6083
6066
  this.state = 'loading';
@@ -6131,14 +6114,18 @@ up.Request = (_a = class Request extends up.Record {
6131
6114
  this.emit('up:request:offline', { log: message });
6132
6115
  }
6133
6116
  respondWith(response) {
6134
- if (this.state !== 'loading')
6117
+ this.response = response;
6118
+ console.debug("[request] respondWith() at state %o / uid %o", this.state, this.uid);
6119
+ if (this.isSettled())
6135
6120
  return;
6136
6121
  this.state = 'loaded';
6137
6122
  if (response.ok) {
6138
- return this.deferred.resolve(response);
6123
+ console.debug("[request] fulfilling deferred of %o with response", this.uid);
6124
+ this.deferred.resolve(response);
6139
6125
  }
6140
6126
  else {
6141
- return this.deferred.reject(response);
6127
+ console.debug("[request] rejecting deferred of %o with response", this.uid);
6128
+ this.deferred.reject(response);
6142
6129
  }
6143
6130
  }
6144
6131
  isSettled() {
@@ -6189,24 +6176,6 @@ up.Request = (_a = class Request extends up.Record {
6189
6176
  }
6190
6177
  return new up.Response(responseAttrs);
6191
6178
  }
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
6179
  buildEventEmitter(args) {
6211
6180
  return up.EventEmitter.fromEmitArgs(args, {
6212
6181
  layer: this.layer,
@@ -6236,6 +6205,9 @@ up.Request = (_a = class Request extends up.Record {
6236
6205
  const now = new Date();
6237
6206
  return now - this.queuedAt;
6238
6207
  }
6208
+ header(name) {
6209
+ return this.headers[name];
6210
+ }
6239
6211
  static tester(condition, { except } = {}) {
6240
6212
  let testFn;
6241
6213
  if (u.isFunction(condition)) {
@@ -6252,8 +6224,7 @@ up.Request = (_a = class Request extends up.Record {
6252
6224
  testFn = (_request) => condition;
6253
6225
  }
6254
6226
  if (except) {
6255
- let exceptCacheKey = except.cacheKey();
6256
- return (request) => (request.cacheKey() !== exceptCacheKey) && testFn(request);
6227
+ return (request) => !up.cache.isCacheCompatible(except, request) && testFn(request);
6257
6228
  }
6258
6229
  else {
6259
6230
  return testFn;
@@ -6267,7 +6238,7 @@ up.Request = (_a = class Request extends up.Record {
6267
6238
 
6268
6239
 
6269
6240
  /***/ }),
6270
- /* 70 */
6241
+ /* 69 */
6271
6242
  /***/ (() => {
6272
6243
 
6273
6244
  let u = up.util;
@@ -6298,6 +6269,151 @@ up.Request.Cache = class Cache extends up.Cache {
6298
6269
  };
6299
6270
 
6300
6271
 
6272
+ /***/ }),
6273
+ /* 70 */
6274
+ /***/ (function() {
6275
+
6276
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6277
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6278
+ return new (P || (P = Promise))(function (resolve, reject) {
6279
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6280
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6281
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
6282
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
6283
+ });
6284
+ };
6285
+ const u = up.util;
6286
+ up.Request.Cache3 = class Cache3 {
6287
+ constructor() {
6288
+ this.reset();
6289
+ }
6290
+ reset() {
6291
+ this.varyInfo = {};
6292
+ this.map = new Map();
6293
+ }
6294
+ cacheKey(request) {
6295
+ let varyHeaderNames = this.getPreviousVaryHeaderNames(request);
6296
+ let varyPart = u.flatMap(varyHeaderNames, (headerName) => [headerName, request.header(headerName)]);
6297
+ return [request.description, ...varyPart].join(':');
6298
+ }
6299
+ getPreviousVaryHeaderNames(request) {
6300
+ var _a, _b;
6301
+ return ((_a = this.varyInfo)[_b = request.description] || (_a[_b] = new Set()));
6302
+ }
6303
+ get(request) {
6304
+ console.debug("[cache] get() called with %o", request.description);
6305
+ let cacheKey = this.cacheKey(request);
6306
+ let cachedRequest = this.map.get(cacheKey);
6307
+ console.debug("[cache] cache hit is %o", cachedRequest);
6308
+ if (cachedRequest) {
6309
+ if (this.isUsable(cachedRequest)) {
6310
+ return cachedRequest;
6311
+ }
6312
+ else {
6313
+ this.map.delete(cacheKey);
6314
+ }
6315
+ }
6316
+ }
6317
+ get maxSize() {
6318
+ return up.network.config.cacheSize;
6319
+ }
6320
+ isUsable(request) {
6321
+ const evictAge = up.network.config.cacheEvictAge;
6322
+ const age = new Date() - request.queuedAt;
6323
+ return age < evictAge;
6324
+ }
6325
+ put(request) {
6326
+ return __awaiter(this, void 0, void 0, function* () {
6327
+ console.debug("[cache] put() called for %o", request.description);
6328
+ this.makeRoom();
6329
+ let cacheKey = this.updateCacheKey(request);
6330
+ this.map.set(cacheKey, request);
6331
+ });
6332
+ }
6333
+ updateCacheKey(request) {
6334
+ let oldCacheKey = this.cacheKey(request);
6335
+ let { response } = request;
6336
+ if (response) {
6337
+ this.mergePreviousHeaderNames(request, response);
6338
+ let newCacheKey = this.cacheKey(request);
6339
+ this.renameMapKey(oldCacheKey, newCacheKey);
6340
+ return newCacheKey;
6341
+ }
6342
+ else {
6343
+ return oldCacheKey;
6344
+ }
6345
+ }
6346
+ renameMapKey(oldKey, newKey) {
6347
+ if (this.map.has(oldKey)) {
6348
+ this.map.set(newKey, this.map.get(oldKey));
6349
+ this.map.delete(oldKey);
6350
+ }
6351
+ }
6352
+ mergePreviousHeaderNames(request, response) {
6353
+ let responseVaryHeaderNames = response.ownVaryHeaderNames;
6354
+ if (responseVaryHeaderNames.length) {
6355
+ let previousVaryHeaderNames = this.getPreviousVaryHeaderNames(request);
6356
+ for (let varyHeaderName of responseVaryHeaderNames) {
6357
+ previousVaryHeaderNames.add(varyHeaderName);
6358
+ }
6359
+ }
6360
+ }
6361
+ alias(existingCachedRequest, newRequest) {
6362
+ this.connect(existingCachedRequest, newRequest, { force: true });
6363
+ this.put(newRequest);
6364
+ }
6365
+ connect(existingCachedRequest, newRequest, options = {}) {
6366
+ var _a;
6367
+ return __awaiter(this, void 0, void 0, function* () {
6368
+ let value = yield u.always(existingCachedRequest);
6369
+ if (value instanceof up.Response) {
6370
+ console.debug("[cache] connect settles to response %o", value.text);
6371
+ if (options.force || this.isCacheCompatible(existingCachedRequest, newRequest)) {
6372
+ console.debug("[cache] they are compatible");
6373
+ newRequest.fromCache = true;
6374
+ newRequest.respondWith(value);
6375
+ u.delegate(newRequest, ['expired', 'state'], () => existingCachedRequest);
6376
+ }
6377
+ else {
6378
+ console.debug("[cache] they are incompatible");
6379
+ (_a = options.onIncompatible) === null || _a === void 0 ? void 0 : _a.call(options, newRequest);
6380
+ }
6381
+ }
6382
+ else {
6383
+ newRequest.deferred.reject(value);
6384
+ }
6385
+ });
6386
+ }
6387
+ delete(request) {
6388
+ let cacheKey = this.cacheKey(request);
6389
+ this.map.delete(cacheKey);
6390
+ }
6391
+ evict(condition = true, testerOptions) {
6392
+ this.eachMatch(condition, testerOptions, (request) => this.delete(request));
6393
+ }
6394
+ expire(condition = true, testerOptions) {
6395
+ this.eachMatch(condition, testerOptions, (request) => request.expired = true);
6396
+ }
6397
+ makeRoom() {
6398
+ if (this.maxSize === 0) {
6399
+ throw "Disabling the cache with maxSize 0 is no longer supported. Use up.network.config.autoCache = false instead.";
6400
+ }
6401
+ while (this.map.size >= this.maxSize) {
6402
+ let oldestKey = this.map.keys().next().value;
6403
+ this.map.delete(oldestKey);
6404
+ }
6405
+ }
6406
+ eachMatch(condition = true, testerOptions, fn) {
6407
+ let tester = up.Request.tester(condition, testerOptions);
6408
+ let results = u.filter(this.map.values(), tester);
6409
+ u.each(results, fn);
6410
+ }
6411
+ isCacheCompatible(request1, request2) {
6412
+ return this.cacheKey(request1) === this.cacheKey(request2);
6413
+ }
6414
+ };
6415
+
6416
+
6301
6417
  /***/ }),
6302
6418
  /* 71 */
6303
6419
  /***/ (() => {
@@ -6318,7 +6434,6 @@ up.Request.Queue = class Queue {
6318
6434
  asap(request) {
6319
6435
  request.runQueuedCallbacks();
6320
6436
  u.always(request, responseOrError => this.onRequestSettled(request, responseOrError));
6321
- request.queuedAt = new Date();
6322
6437
  this.scheduleSlowTimer(request);
6323
6438
  this.queueRequest(request);
6324
6439
  u.microtask(() => this.poke());
@@ -6471,12 +6586,8 @@ up.Request.XHRRenderer = (_a = class XHRRenderer {
6471
6586
  xhr.timeout = this.request.timeout;
6472
6587
  }
6473
6588
  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]);
6589
+ for (let key of ['target', 'failTarget', 'mode', 'failMode', 'context', 'failContext']) {
6590
+ this.addHeader(xhr, up.protocol.headerize(key), this.request[key]);
6480
6591
  }
6481
6592
  let csrfHeader, csrfToken;
6482
6593
  if ((csrfHeader = this.request.csrfHeader()) && (csrfToken = this.request.csrfToken())) {
@@ -6487,6 +6598,10 @@ up.Request.XHRRenderer = (_a = class XHRRenderer {
6487
6598
  if (contentType) {
6488
6599
  this.addHeader(xhr, 'Content-Type', contentType);
6489
6600
  }
6601
+ for (let headerName in this.request.headers) {
6602
+ let headerValue = this.request.headers[headerName];
6603
+ xhr.setRequestHeader(headerName, headerValue);
6604
+ }
6490
6605
  Object.assign(xhr, handlers);
6491
6606
  xhr.send(this.getPayload());
6492
6607
  }
@@ -6507,11 +6622,11 @@ up.Request.XHRRenderer = (_a = class XHRRenderer {
6507
6622
  this.finalizePayload();
6508
6623
  return this.payload;
6509
6624
  }
6510
- addHeader(xhr, header, value) {
6625
+ addHeader(xhr, name, value) {
6511
6626
  if (u.isOptions(value) || u.isArray(value)) {
6512
- value = JSON.stringify(value);
6627
+ value = u.safeStringifyJSON(value);
6513
6628
  }
6514
- xhr.setRequestHeader(header, value);
6629
+ this.request.headers[name] = value;
6515
6630
  }
6516
6631
  finalizePayload() {
6517
6632
  this.payload = this.request.payload;
@@ -6579,6 +6694,11 @@ up.Response = class Response extends up.Record {
6579
6694
  var _a;
6580
6695
  return this.headers[name] || ((_a = this.xhr) === null || _a === void 0 ? void 0 : _a.getResponseHeader(name));
6581
6696
  }
6697
+ get ownVaryHeaderNames() {
6698
+ let varyHeaderValue = this.header('Vary');
6699
+ let varyHeaderNames = u.parseTokens(varyHeaderValue, { separator: 'comma' });
6700
+ return u.filter(varyHeaderNames, (headerName) => this.request.header(headerName));
6701
+ }
6582
6702
  get contentType() {
6583
6703
  return this.header('Content-Type');
6584
6704
  }
@@ -6620,12 +6740,13 @@ const u = up.util;
6620
6740
  const e = up.element;
6621
6741
  up.ResponseDoc = (_a = class ResponseDoc {
6622
6742
  constructor(options) {
6623
- this.noscriptWrapper = new up.HTMLWrapper('noscript');
6624
- this.scriptWrapper = new up.HTMLWrapper('script');
6625
6743
  this.root =
6626
6744
  this.parseDocument(options) ||
6627
6745
  this.parseFragment(options) ||
6628
6746
  this.parseContent(options);
6747
+ if (!up.fragment.config.runScripts) {
6748
+ this.root.querySelectorAll('script').forEach((e) => e.remove());
6749
+ }
6629
6750
  this.cspNonces = options.cspNonces;
6630
6751
  if (options.origin) {
6631
6752
  let originSelector = up.fragment.tryToTarget(options.origin);
@@ -6635,7 +6756,11 @@ up.ResponseDoc = (_a = class ResponseDoc {
6635
6756
  }
6636
6757
  }
6637
6758
  parseDocument(options) {
6638
- return this.parse(options.document, e.createDocumentFromHTML);
6759
+ let document = this.parse(options.document, e.createBrokenDocumentFromHTML);
6760
+ if (document) {
6761
+ this.scriptishNeedFix = true;
6762
+ return document;
6763
+ }
6639
6764
  }
6640
6765
  parseContent(options) {
6641
6766
  let content = options.content || '';
@@ -6643,7 +6768,6 @@ up.ResponseDoc = (_a = class ResponseDoc {
6643
6768
  target = u.map(up.fragment.parseTargetSteps(target), 'selector').join(',');
6644
6769
  const matchingElement = e.createFromSelector(target);
6645
6770
  if (u.isString(content)) {
6646
- content = this.wrapHTML(content);
6647
6771
  matchingElement.innerHTML = content;
6648
6772
  }
6649
6773
  else {
@@ -6656,7 +6780,6 @@ up.ResponseDoc = (_a = class ResponseDoc {
6656
6780
  }
6657
6781
  parse(value, parseFn = e.createFromHTML) {
6658
6782
  if (u.isString(value)) {
6659
- value = this.wrapHTML(value);
6660
6783
  value = parseFn(value);
6661
6784
  }
6662
6785
  return value;
@@ -6664,19 +6787,9 @@ up.ResponseDoc = (_a = class ResponseDoc {
6664
6787
  rootSelector() {
6665
6788
  return up.fragment.toTarget(this.root);
6666
6789
  }
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
6790
  getTitle() {
6678
6791
  var _a;
6679
- return (_a = this.root.querySelector("head title")) === null || _a === void 0 ? void 0 : _a.textContent;
6792
+ return (_a = this.root.querySelector('head title')) === null || _a === void 0 ? void 0 : _a.textContent;
6680
6793
  }
6681
6794
  select(selector) {
6682
6795
  let finder = new up.FragmentFinder({
@@ -6687,9 +6800,10 @@ up.ResponseDoc = (_a = class ResponseDoc {
6687
6800
  return finder.find();
6688
6801
  }
6689
6802
  finalizeElement(element) {
6690
- this.noscriptWrapper.unwrap(element);
6691
6803
  up.NonceableCallback.adoptNonces(element, this.cspNonces);
6692
- this.scriptWrapper.unwrap(element);
6804
+ if (this.scriptishNeedFix) {
6805
+ element.querySelectorAll('noscript, script').forEach(e.fixScriptish);
6806
+ }
6693
6807
  }
6694
6808
  },
6695
6809
  (() => {
@@ -7277,7 +7391,8 @@ up.protocol = (function () {
7277
7391
  return extractHeader(xhr, 'location') || xhr.responseURL;
7278
7392
  }
7279
7393
  function titleFromXHR(xhr) {
7280
- return extractHeader(xhr, 'title');
7394
+ var _a, _b, _c;
7395
+ 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);
7281
7396
  }
7282
7397
  function targetFromXHR(xhr) {
7283
7398
  return extractHeader(xhr, 'target');
@@ -8877,25 +8992,24 @@ up.network = (function () {
8877
8992
  autoCache(request) { return request.isSafe(); },
8878
8993
  expireCache(request, _response) { return !request.isSafe(); },
8879
8994
  evictCache: false,
8880
- requestMetaKeys: ['target', 'failTarget', 'mode', 'failMode', 'context', 'failContext'],
8881
8995
  progressBar: true,
8882
8996
  timeout: 90000,
8883
8997
  }));
8884
8998
  const queue = new up.Request.Queue();
8885
- const cache = new up.Request.Cache();
8999
+ const cache = new up.Request.Cache3();
8886
9000
  let progressBar = null;
8887
9001
  function reset() {
8888
9002
  abortRequests();
8889
9003
  queue.reset();
8890
9004
  config.reset();
8891
- cache.evict();
9005
+ cache.reset();
8892
9006
  progressBar === null || progressBar === void 0 ? void 0 : progressBar.destroy();
8893
9007
  progressBar = null;
8894
9008
  }
8895
9009
  function makeRequest(...args) {
8896
9010
  const options = parseRequestOptions(args);
8897
9011
  const request = new up.Request(options);
8898
- useCachedRequest(request) || queueRequest(request);
9012
+ processRequest(request);
8899
9013
  return request;
8900
9014
  }
8901
9015
  function parseRequestOptions(args) {
@@ -8907,31 +9021,30 @@ up.network = (function () {
8907
9021
  (_b = (_a = up.migrate).handleRequestOptions) === null || _b === void 0 ? void 0 : _b.call(_a, options);
8908
9022
  return options;
8909
9023
  }
8910
- function useCachedRequest(request) {
9024
+ function processRequest(request) {
9025
+ useCachedRequest(request) || queueRequest(request);
9026
+ }
9027
+ function useCachedRequest(newRequest) {
8911
9028
  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) {
9029
+ if (newRequest.willCache() && (cachedRequest = cache.get(newRequest))) {
9030
+ up.puts('up.request()', 'Re-using previous request to %s %s', newRequest.method, newRequest.url);
9031
+ if (!newRequest.background) {
8915
9032
  queue.promoteToForeground(cachedRequest);
8916
9033
  }
8917
- request.followState(cachedRequest);
8918
- request.fromCache = true;
9034
+ cache.connect(cachedRequest, newRequest, { onIncompatible: processRequest });
8919
9035
  return true;
8920
9036
  }
8921
9037
  }
8922
9038
  function queueRequest(request) {
8923
- if (request.preload && !request.isSafe()) {
8924
- up.fail('Will not preload request to %s', request.description);
8925
- }
8926
9039
  handleCaching(request);
8927
9040
  queue.asap(request);
8928
9041
  return true;
8929
9042
  }
8930
9043
  function handleCaching(request) {
8931
9044
  if (request.willCache()) {
8932
- cache.set(request, request);
9045
+ cache.put(request);
8933
9046
  }
8934
- return u.always(request, function (response) {
9047
+ u.always(request, function (response) {
8935
9048
  var _a, _b, _c, _d;
8936
9049
  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
9050
  if (expireCache) {
@@ -8942,7 +9055,7 @@ up.network = (function () {
8942
9055
  cache.evict(evictCache, { except: request });
8943
9056
  }
8944
9057
  if (cache.get(request)) {
8945
- cache.set(request, request);
9058
+ cache.put(request);
8946
9059
  }
8947
9060
  if (!response.ok) {
8948
9061
  cache.evict(request);
@@ -9425,16 +9538,22 @@ up.link = (function () {
9425
9538
  }
9426
9539
  function preload(link, options) {
9427
9540
  link = up.fragment.get(link);
9428
- if (!shouldPreload()) {
9429
- return Promise.reject(new up.Error('Link preloading is disabled'));
9541
+ let issue = preloadIssue(link);
9542
+ if (issue) {
9543
+ return Promise.reject(new up.Error(issue));
9430
9544
  }
9431
9545
  const guardEvent = up.event.build('up:link:preload', { log: ['Preloading link %o', link] });
9432
9546
  return follow(link, Object.assign(Object.assign({ abortable: false }, options), { guardEvent, preload: true }));
9433
9547
  }
9434
- function shouldPreload() {
9435
- let goodConnection = u.negate(up.network.shouldReduceRequests);
9436
- return u.evalAutoOption(config.preloadEnabled, goodConnection);
9548
+ function preloadIssue(link) {
9549
+ if (!u.evalAutoOption(config.preloadEnabled, autoPreloadEnabled, link)) {
9550
+ return 'Preloading is disabled';
9551
+ }
9552
+ else if (!isSafe(link)) {
9553
+ return 'Will not preload an unsafe link';
9554
+ }
9437
9555
  }
9556
+ const autoPreloadEnabled = u.negate(up.network.shouldReduceRequests);
9438
9557
  function followMethod(link, options = {}) {
9439
9558
  return u.normalizeMethod(options.method || link.getAttribute('up-method') || link.getAttribute('data-method'));
9440
9559
  }
@@ -18,9 +18,13 @@ module Unpoly
18
18
  end
19
19
 
20
20
  private
21
-
21
+
22
22
  def set_up_request_echo_headers
23
- response.headers['X-Up-Location'] = up.request_url_without_up_params
23
+ request_url_without_up_params = up.request_url_without_up_params
24
+ unless request_url_without_up_params == request.original_url
25
+ response.headers['X-Up-Location'] = up.request_url_without_up_params
26
+ end
27
+
24
28
  response.headers['X-Up-Method'] = request.method
25
29
  end
26
30
 
@@ -4,6 +4,6 @@ module Unpoly
4
4
  # The current version of the unpoly-rails gem.
5
5
  # This version number is also used for releases of the Unpoly
6
6
  # frontend code.
7
- VERSION = '2.7.2.1'
7
+ VERSION = '2.7.2.2'
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unpoly-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.2.1
4
+ version: 2.7.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henning Koch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-03 00:00:00.000000000 Z
11
+ date: 2023-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties