one 2.6.4 → 2.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,35 +23,103 @@ __export(assetRange_exports, { withRange: () => withRange });
23
23
  module.exports = __toCommonJS(assetRange_exports);
24
24
  async function withRange(request, response) {
25
25
  const range = request.headers.get("range");
26
- if (!range || request.method !== "GET" || response.status !== 200 || response.headers.has("content-range") || response.headers.has("content-encoding")) {
26
+ if (!range || request.method !== "GET" || response.status !== 200 || !response.body || response.headers.has("content-range") || response.headers.has("content-encoding") || !ifRangeMatches(request.headers.get("if-range"), response.headers)) {
27
27
  return response;
28
28
  }
29
29
  const match = /^bytes=(\d*)-(\d*)$/.exec(range.trim());
30
30
  if (!match || !match[1] && !match[2]) return response;
31
- const bytes = new Uint8Array(await response.arrayBuffer());
32
- const size = bytes.byteLength;
33
- let start;
34
- let end;
35
- if (!match[1]) {
36
- start = Math.max(0, size - Number(match[2]));
37
- end = size - 1;
38
- } else {
39
- start = Number(match[1]);
40
- end = match[2] ? Math.min(Number(match[2]), size - 1) : size - 1;
41
- }
31
+ const length = response.headers.get("content-length");
32
+ const known = length && /^\d+$/.test(length) ? Number(length) : void 0;
42
33
  const headers = new Headers(response.headers);
43
34
  headers.set("accept-ranges", "bytes");
44
- if (start >= size || start > end) {
35
+ headers.delete("content-length");
36
+ const { size, kept, keptStart } = await readRange(response.body, match, known);
37
+ const span = resolve(match, size);
38
+ if (!span) {
45
39
  headers.set("content-range", `bytes */${size}`);
46
40
  return new Response(null, {
47
41
  status: 416,
48
42
  headers
49
43
  });
50
44
  }
51
- headers.set("content-range", `bytes ${start}-${end}/${size}`);
52
- headers.set("content-length", String(end - start + 1));
53
- return new Response(bytes.subarray(start, end + 1), {
45
+ headers.set("content-range", `bytes ${span.start}-${span.end}/${size}`);
46
+ headers.set("content-length", String(span.end - span.start + 1));
47
+ return new Response(kept.subarray(span.start - keptStart, span.end - keptStart + 1), {
54
48
  status: 206,
55
49
  headers
56
50
  });
57
51
  }
52
+ function ifRangeMatches(ifRange, headers) {
53
+ if (!ifRange) return true;
54
+ const value = ifRange.trim();
55
+ if (value.startsWith("\"")) {
56
+ const etag = headers.get("etag");
57
+ return !!etag && !etag.startsWith("W/") && etag === value;
58
+ }
59
+ if (value.startsWith("W/")) return false;
60
+ return headers.get("last-modified") === value;
61
+ }
62
+ function resolve(match, size) {
63
+ let start;
64
+ let end;
65
+ if (!match[1]) {
66
+ start = Math.max(0, size - Number(match[2]));
67
+ end = size - 1;
68
+ } else {
69
+ start = Number(match[1]);
70
+ end = match[2] ? Math.min(Number(match[2]), size - 1) : size - 1;
71
+ }
72
+ if (start >= size || start > end) return;
73
+ return {
74
+ start,
75
+ end
76
+ };
77
+ }
78
+ async function readRange(body, match, known) {
79
+ const span = known === void 0 ? void 0 : resolve(match, known) ?? {
80
+ start: known,
81
+ end: -1
82
+ };
83
+ const suffix = !span && !match[1] ? Number(match[2]) : 0;
84
+ const from = span ? span.start : match[1] ? Number(match[1]) : 0;
85
+ const to = span ? span.end : match[2] && match[1] ? Number(match[2]) : Number.POSITIVE_INFINITY;
86
+ const chunks = [];
87
+ let keptBytes = 0;
88
+ let size = 0;
89
+ const reader = body.getReader();
90
+ while (known === void 0 || size <= to) {
91
+ const { done, value } = await reader.read();
92
+ if (done) break;
93
+ const chunkStart = size;
94
+ size += value.byteLength;
95
+ if (suffix) {
96
+ chunks.push(value);
97
+ keptBytes += value.byteLength;
98
+ while (chunks.length > 1 && keptBytes - chunks[0].byteLength >= suffix) {
99
+ keptBytes -= chunks.shift().byteLength;
100
+ }
101
+ continue;
102
+ }
103
+ const lo = Math.max(from, chunkStart);
104
+ const hi = Math.min(to + 1, size);
105
+ if (hi > lo) {
106
+ chunks.push(value.subarray(lo - chunkStart, hi - chunkStart));
107
+ keptBytes += hi - lo;
108
+ }
109
+ }
110
+ if (known !== void 0) {
111
+ await reader.cancel();
112
+ size = known;
113
+ }
114
+ const kept = new Uint8Array(keptBytes);
115
+ let at = 0;
116
+ for (const chunk of chunks) {
117
+ kept.set(chunk, at);
118
+ at += chunk.byteLength;
119
+ }
120
+ return {
121
+ size,
122
+ kept,
123
+ keptStart: suffix ? size - keptBytes : from
124
+ };
125
+ }
@@ -25,35 +25,121 @@ __export(assetRange_exports, { withRange: () => withRange });
25
25
  module.exports = __toCommonJS(assetRange_exports);
26
26
  async function withRange(request, response) {
27
27
  var range = request.headers.get("range");
28
- if (!range || request.method !== "GET" || response.status !== 200 || response.headers.has("content-range") || response.headers.has("content-encoding")) {
28
+ if (!range || request.method !== "GET" || response.status !== 200 || !response.body || response.headers.has("content-range") || response.headers.has("content-encoding") || !ifRangeMatches(request.headers.get("if-range"), response.headers)) {
29
29
  return response;
30
30
  }
31
31
  var match = /^bytes=(\d*)-(\d*)$/.exec(range.trim());
32
32
  if (!match || !match[1] && !match[2]) return response;
33
- var bytes = new Uint8Array(await response.arrayBuffer());
34
- var size = bytes.byteLength;
35
- var start;
36
- var end;
37
- if (!match[1]) {
38
- start = Math.max(0, size - Number(match[2]));
39
- end = size - 1;
40
- } else {
41
- start = Number(match[1]);
42
- end = match[2] ? Math.min(Number(match[2]), size - 1) : size - 1;
43
- }
33
+ var length = response.headers.get("content-length");
34
+ var known = length && /^\d+$/.test(length) ? Number(length) : void 0;
44
35
  var headers = new Headers(response.headers);
45
36
  headers.set("accept-ranges", "bytes");
46
- if (start >= size || start > end) {
37
+ headers.delete("content-length");
38
+ var { size, kept, keptStart } = await readRange(response.body, match, known);
39
+ var span = resolve(match, size);
40
+ if (!span) {
47
41
  headers.set("content-range", `bytes */${size}`);
48
42
  return new Response(null, {
49
43
  status: 416,
50
44
  headers
51
45
  });
52
46
  }
53
- headers.set("content-range", `bytes ${start}-${end}/${size}`);
54
- headers.set("content-length", String(end - start + 1));
55
- return new Response(bytes.subarray(start, end + 1), {
47
+ headers.set("content-range", `bytes ${span.start}-${span.end}/${size}`);
48
+ headers.set("content-length", String(span.end - span.start + 1));
49
+ return new Response(kept.subarray(span.start - keptStart, span.end - keptStart + 1), {
56
50
  status: 206,
57
51
  headers
58
52
  });
59
53
  }
54
+ function ifRangeMatches(ifRange, headers) {
55
+ if (!ifRange) return true;
56
+ var value = ifRange.trim();
57
+ if (value.startsWith("\"")) {
58
+ var etag = headers.get("etag");
59
+ return !!etag && !etag.startsWith("W/") && etag === value;
60
+ }
61
+ if (value.startsWith("W/")) return false;
62
+ return headers.get("last-modified") === value;
63
+ }
64
+ function resolve(match, size) {
65
+ var start;
66
+ var end;
67
+ if (!match[1]) {
68
+ start = Math.max(0, size - Number(match[2]));
69
+ end = size - 1;
70
+ } else {
71
+ start = Number(match[1]);
72
+ end = match[2] ? Math.min(Number(match[2]), size - 1) : size - 1;
73
+ }
74
+ if (start >= size || start > end) return;
75
+ return {
76
+ start,
77
+ end
78
+ };
79
+ }
80
+ async function readRange(body, match, known) {
81
+ var _resolve;
82
+ var span = known === void 0 ? void 0 : (_resolve = resolve(match, known)) !== null && _resolve !== void 0 ? _resolve : {
83
+ start: known,
84
+ end: -1
85
+ };
86
+ var suffix = !span && !match[1] ? Number(match[2]) : 0;
87
+ var from = span ? span.start : match[1] ? Number(match[1]) : 0;
88
+ var to = span ? span.end : match[2] && match[1] ? Number(match[2]) : Number.POSITIVE_INFINITY;
89
+ var chunks = [];
90
+ var keptBytes = 0;
91
+ var size = 0;
92
+ var reader = body.getReader();
93
+ while (known === void 0 || size <= to) {
94
+ var { done, value } = await reader.read();
95
+ if (done) break;
96
+ var chunkStart = size;
97
+ size += value.byteLength;
98
+ if (suffix) {
99
+ chunks.push(value);
100
+ keptBytes += value.byteLength;
101
+ while (chunks.length > 1 && keptBytes - chunks[0].byteLength >= suffix) {
102
+ keptBytes -= chunks.shift().byteLength;
103
+ }
104
+ continue;
105
+ }
106
+ var lo = Math.max(from, chunkStart);
107
+ var hi = Math.min(to + 1, size);
108
+ if (hi > lo) {
109
+ chunks.push(value.subarray(lo - chunkStart, hi - chunkStart));
110
+ keptBytes += hi - lo;
111
+ }
112
+ }
113
+ if (known !== void 0) {
114
+ await reader.cancel();
115
+ size = known;
116
+ }
117
+ var kept = new Uint8Array(keptBytes);
118
+ var at = 0;
119
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
120
+ try {
121
+ for (var _iterator = chunks[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
122
+ var chunk = _step.value;
123
+ kept.set(chunk, at);
124
+ at += chunk.byteLength;
125
+ }
126
+ } catch (err) {
127
+ _didIteratorError = true;
128
+ _iteratorError = err;
129
+ } finally {
130
+ try {
131
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
132
+ _iterator.return();
133
+ }
134
+ } finally {
135
+ if (_didIteratorError) {
136
+ throw _iteratorError;
137
+ }
138
+ }
139
+ }
140
+ return {
141
+ size,
142
+ kept,
143
+ keptStart: suffix ? size - keptBytes : from
144
+ };
145
+ }
@@ -25,37 +25,123 @@ __export(assetRange_exports, { withRange: () => withRange });
25
25
  module.exports = __toCommonJS(assetRange_exports);
26
26
  async function withRange(request, response) {
27
27
  var range = request.headers.get("range");
28
- if (!range || request.method !== "GET" || response.status !== 200 || response.headers.has("content-range") || response.headers.has("content-encoding")) {
28
+ if (!range || request.method !== "GET" || response.status !== 200 || !response.body || response.headers.has("content-range") || response.headers.has("content-encoding") || !ifRangeMatches(request.headers.get("if-range"), response.headers)) {
29
29
  return response;
30
30
  }
31
31
  var match = /^bytes=(\d*)-(\d*)$/.exec(range.trim());
32
32
  if (!match || !match[1] && !match[2]) return response;
33
- var bytes = new Uint8Array(await response.arrayBuffer());
34
- var size = bytes.byteLength;
35
- var start;
36
- var end;
37
- if (!match[1]) {
38
- start = Math.max(0, size - Number(match[2]));
39
- end = size - 1;
40
- } else {
41
- start = Number(match[1]);
42
- end = match[2] ? Math.min(Number(match[2]), size - 1) : size - 1;
43
- }
33
+ var length = response.headers.get("content-length");
34
+ var known = length && /^\d+$/.test(length) ? Number(length) : void 0;
44
35
  var headers = new Headers(response.headers);
45
36
  headers.set("accept-ranges", "bytes");
46
- if (start >= size || start > end) {
37
+ headers.delete("content-length");
38
+ var { size, kept, keptStart } = await readRange(response.body, match, known);
39
+ var span = resolve(match, size);
40
+ if (!span) {
47
41
  headers.set("content-range", `bytes */${size}`);
48
42
  return new Response(null, {
49
43
  status: 416,
50
44
  headers
51
45
  });
52
46
  }
53
- headers.set("content-range", `bytes ${start}-${end}/${size}`);
54
- headers.set("content-length", String(end - start + 1));
55
- return new Response(bytes.subarray(start, end + 1), {
47
+ headers.set("content-range", `bytes ${span.start}-${span.end}/${size}`);
48
+ headers.set("content-length", String(span.end - span.start + 1));
49
+ return new Response(kept.subarray(span.start - keptStart, span.end - keptStart + 1), {
56
50
  status: 206,
57
51
  headers
58
52
  });
59
53
  }
54
+ function ifRangeMatches(ifRange, headers) {
55
+ if (!ifRange) return true;
56
+ var value = ifRange.trim();
57
+ if (value.startsWith("\"")) {
58
+ var etag = headers.get("etag");
59
+ return !!etag && !etag.startsWith("W/") && etag === value;
60
+ }
61
+ if (value.startsWith("W/")) return false;
62
+ return headers.get("last-modified") === value;
63
+ }
64
+ function resolve(match, size) {
65
+ var start;
66
+ var end;
67
+ if (!match[1]) {
68
+ start = Math.max(0, size - Number(match[2]));
69
+ end = size - 1;
70
+ } else {
71
+ start = Number(match[1]);
72
+ end = match[2] ? Math.min(Number(match[2]), size - 1) : size - 1;
73
+ }
74
+ if (start >= size || start > end) return;
75
+ return {
76
+ start,
77
+ end
78
+ };
79
+ }
80
+ async function readRange(body, match, known) {
81
+ var _resolve;
82
+ var span = known === void 0 ? void 0 : (_resolve = resolve(match, known)) !== null && _resolve !== void 0 ? _resolve : {
83
+ start: known,
84
+ end: -1
85
+ };
86
+ var suffix = !span && !match[1] ? Number(match[2]) : 0;
87
+ var from = span ? span.start : match[1] ? Number(match[1]) : 0;
88
+ var to = span ? span.end : match[2] && match[1] ? Number(match[2]) : Number.POSITIVE_INFINITY;
89
+ var chunks = [];
90
+ var keptBytes = 0;
91
+ var size = 0;
92
+ var reader = body.getReader();
93
+ while (known === void 0 || size <= to) {
94
+ var { done, value } = await reader.read();
95
+ if (done) break;
96
+ var chunkStart = size;
97
+ size += value.byteLength;
98
+ if (suffix) {
99
+ chunks.push(value);
100
+ keptBytes += value.byteLength;
101
+ while (chunks.length > 1 && keptBytes - chunks[0].byteLength >= suffix) {
102
+ keptBytes -= chunks.shift().byteLength;
103
+ }
104
+ continue;
105
+ }
106
+ var lo = Math.max(from, chunkStart);
107
+ var hi = Math.min(to + 1, size);
108
+ if (hi > lo) {
109
+ chunks.push(value.subarray(lo - chunkStart, hi - chunkStart));
110
+ keptBytes += hi - lo;
111
+ }
112
+ }
113
+ if (known !== void 0) {
114
+ await reader.cancel();
115
+ size = known;
116
+ }
117
+ var kept = new Uint8Array(keptBytes);
118
+ var at = 0;
119
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
120
+ try {
121
+ for (var _iterator = chunks[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
122
+ var chunk = _step.value;
123
+ kept.set(chunk, at);
124
+ at += chunk.byteLength;
125
+ }
126
+ } catch (err) {
127
+ _didIteratorError = true;
128
+ _iteratorError = err;
129
+ } finally {
130
+ try {
131
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
132
+ _iterator.return();
133
+ }
134
+ } finally {
135
+ if (_didIteratorError) {
136
+ throw _iteratorError;
137
+ }
138
+ }
139
+ }
140
+ return {
141
+ size,
142
+ kept,
143
+ keptStart: suffix ? size - keptBytes : from
144
+ };
145
+ }
60
146
 
61
147
  //# sourceMappingURL=assetRange.native.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assetRange.native.js","names":[],"sources":["cjs/server/assetRange.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar assetRange_exports = {};\n__export(assetRange_exports, {\n withRange: () => withRange\n});\nmodule.exports = __toCommonJS(assetRange_exports);\nasync function withRange(request, response) {\n var range = request.headers.get(\"range\");\n if (!range || request.method !== \"GET\" || response.status !== 200 || response.headers.has(\"content-range\") || response.headers.has(\"content-encoding\")) {\n return response;\n }\n var match = /^bytes=(\\d*)-(\\d*)$/.exec(range.trim());\n if (!match || !match[1] && !match[2]) return response;\n var bytes = new Uint8Array(await response.arrayBuffer());\n var size = bytes.byteLength;\n var start;\n var end;\n if (!match[1]) {\n start = Math.max(0, size - Number(match[2]));\n end = size - 1;\n } else {\n start = Number(match[1]);\n end = match[2] ? Math.min(Number(match[2]), size - 1) : size - 1;\n }\n var headers = new Headers(response.headers);\n headers.set(\"accept-ranges\", \"bytes\");\n if (start >= size || start > end) {\n headers.set(\"content-range\", `bytes */${size}`);\n return new Response(null, {\n status: 416,\n headers\n });\n }\n headers.set(\"content-range\", `bytes ${start}-${end}/${size}`);\n headers.set(\"content-length\", String(end - start + 1));\n return new Response(bytes.subarray(start, end + 1), {\n status: 206,\n headers\n });\n}\n//# sourceMappingURL=assetRange.js.map\n"],"mappings":";;;AACA,IAAI,YAAY,OAAO;AACvB,IAAI,mBAAmB,OAAO;AAC9B,IAAI,oBAAoB,OAAO;AAC/B,IAAI,eAAe,OAAO,UAAU;AACpC,IAAI,YAAY,QAAQ,QAAQ;CAC9B,KAAK,IAAI,QAAQ,KACf,UAAU,QAAQ,MAAM;EAAE,KAAK,IAAI;EAAO,YAAY;CAAK,CAAC;AAChE;AACA,IAAI,eAAe,IAAI,MAAM,QAAQ,SAAS;CAC5C,IAAI,QAAQ,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY;EAClE,KAAK,IAAI,OAAO,kBAAkB,IAAI,GACpC,IAAI,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,QAAQ,QACzC,UAAU,IAAI,KAAK;GAAE,WAAW,KAAK;GAAM,YAAY,EAAE,OAAO,iBAAiB,MAAM,GAAG,MAAM,KAAK;EAAW,CAAC;CACvH;CACA,OAAO;AACT;AACA,IAAI,gBAAgB,QAAQ,YAAY,UAAU,CAAC,GAAG,cAAc,EAAE,OAAO,KAAK,CAAC,GAAG,GAAG;AACzF,IAAI,qBAAqB,CAAC;AAC1B,SAAS,oBAAoB,EAC3B,iBAAiB,UACnB,CAAC;AACD,OAAO,UAAU,aAAa,kBAAkB;AAChD,eAAe,UAAU,SAAS,UAAU;CAC1C,IAAI,QAAQ,QAAQ,QAAQ,IAAI,OAAO;CACvC,IAAI,CAAC,SAAS,QAAQ,WAAW,SAAS,SAAS,WAAW,OAAO,SAAS,QAAQ,IAAI,eAAe,KAAK,SAAS,QAAQ,IAAI,kBAAkB,GAAG;EACtJ,OAAO;CACT;CACA,IAAI,QAAQ,sBAAsB,KAAK,MAAM,KAAK,CAAC;CACnD,IAAI,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,MAAM,IAAI,OAAO;CAC7C,IAAI,QAAQ,IAAI,WAAW,MAAM,SAAS,YAAY,CAAC;CACvD,IAAI,OAAO,MAAM;CACjB,IAAI;CACJ,IAAI;CACJ,IAAI,CAAC,MAAM,IAAI;EACb,QAAQ,KAAK,IAAI,GAAG,OAAO,OAAO,MAAM,EAAE,CAAC;EAC3C,MAAM,OAAO;CACf,OAAO;EACL,QAAQ,OAAO,MAAM,EAAE;EACvB,MAAM,MAAM,KAAK,KAAK,IAAI,OAAO,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,OAAO;CACjE;CACA,IAAI,UAAU,IAAI,QAAQ,SAAS,OAAO;CAC1C,QAAQ,IAAI,iBAAiB,OAAO;CACpC,IAAI,SAAS,QAAQ,QAAQ,KAAK;EAChC,QAAQ,IAAI,iBAAiB,WAAW,MAAM;EAC9C,OAAO,IAAI,SAAS,MAAM;GACxB,QAAQ;GACR;EACF,CAAC;CACH;CACA,QAAQ,IAAI,iBAAiB,SAAS,MAAM,GAAG,IAAI,GAAG,MAAM;CAC5D,QAAQ,IAAI,kBAAkB,OAAO,MAAM,QAAQ,CAAC,CAAC;CACrD,OAAO,IAAI,SAAS,MAAM,SAAS,OAAO,MAAM,CAAC,GAAG;EAClD,QAAQ;EACR;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"assetRange.native.js","names":[],"sources":["cjs/server/assetRange.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar assetRange_exports = {};\n__export(assetRange_exports, {\n withRange: () => withRange\n});\nmodule.exports = __toCommonJS(assetRange_exports);\nasync function withRange(request, response) {\n var range = request.headers.get(\"range\");\n if (!range || request.method !== \"GET\" || response.status !== 200 || !response.body || response.headers.has(\"content-range\") || response.headers.has(\"content-encoding\") || !ifRangeMatches(request.headers.get(\"if-range\"), response.headers)) {\n return response;\n }\n var match = /^bytes=(\\d*)-(\\d*)$/.exec(range.trim());\n if (!match || !match[1] && !match[2]) return response;\n var length = response.headers.get(\"content-length\");\n var known = length && /^\\d+$/.test(length) ? Number(length) : void 0;\n var headers = new Headers(response.headers);\n headers.set(\"accept-ranges\", \"bytes\");\n headers.delete(\"content-length\");\n var { size, kept, keptStart } = await readRange(response.body, match, known);\n var span = resolve(match, size);\n if (!span) {\n headers.set(\"content-range\", `bytes */${size}`);\n return new Response(null, {\n status: 416,\n headers\n });\n }\n headers.set(\"content-range\", `bytes ${span.start}-${span.end}/${size}`);\n headers.set(\"content-length\", String(span.end - span.start + 1));\n return new Response(kept.subarray(span.start - keptStart, span.end - keptStart + 1), {\n status: 206,\n headers\n });\n}\nfunction ifRangeMatches(ifRange, headers) {\n if (!ifRange) return true;\n var value = ifRange.trim();\n if (value.startsWith('\"')) {\n var etag = headers.get(\"etag\");\n return !!etag && !etag.startsWith(\"W/\") && etag === value;\n }\n if (value.startsWith(\"W/\")) return false;\n return headers.get(\"last-modified\") === value;\n}\nfunction resolve(match, size) {\n var start;\n var end;\n if (!match[1]) {\n start = Math.max(0, size - Number(match[2]));\n end = size - 1;\n } else {\n start = Number(match[1]);\n end = match[2] ? Math.min(Number(match[2]), size - 1) : size - 1;\n }\n if (start >= size || start > end) return;\n return {\n start,\n end\n };\n}\nasync function readRange(body, match, known) {\n var _resolve;\n var span = known === void 0 ? void 0 : (_resolve = resolve(match, known)) !== null && _resolve !== void 0 ? _resolve : {\n start: known,\n end: -1\n };\n var suffix = !span && !match[1] ? Number(match[2]) : 0;\n var from = span ? span.start : match[1] ? Number(match[1]) : 0;\n var to = span ? span.end : match[2] && match[1] ? Number(match[2]) : Number.POSITIVE_INFINITY;\n var chunks = [];\n var keptBytes = 0;\n var size = 0;\n var reader = body.getReader();\n while (known === void 0 || size <= to) {\n var { done, value } = await reader.read();\n if (done) break;\n var chunkStart = size;\n size += value.byteLength;\n if (suffix) {\n chunks.push(value);\n keptBytes += value.byteLength;\n while (chunks.length > 1 && keptBytes - chunks[0].byteLength >= suffix) {\n keptBytes -= chunks.shift().byteLength;\n }\n continue;\n }\n var lo = Math.max(from, chunkStart);\n var hi = Math.min(to + 1, size);\n if (hi > lo) {\n chunks.push(value.subarray(lo - chunkStart, hi - chunkStart));\n keptBytes += hi - lo;\n }\n }\n if (known !== void 0) {\n await reader.cancel();\n size = known;\n }\n var kept = new Uint8Array(keptBytes);\n var at = 0;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = chunks[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var chunk = _step.value;\n kept.set(chunk, at);\n at += chunk.byteLength;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return {\n size,\n kept,\n keptStart: suffix ? size - keptBytes : from\n };\n}\n//# sourceMappingURL=assetRange.js.map\n"],"mappings":"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"}
@@ -568,31 +568,45 @@ function one(options = {}) {
568
568
  ...dedupeSymlinks ? [ssrSymlinkDedupPlugin] : []
569
569
  ];
570
570
  const nativeWebDevAndProdPlugsin = [(0, import_clientTreeShakePlugin.clientTreeShakePlugin)({ routerRoot })];
571
+ let nativeFormPlugins = [];
572
+ const nativeFormPluginsCapture = {
573
+ name: "one:native-form-plugins",
574
+ configResolved(config) {
575
+ nativeFormPlugins = config.plugins.filter((plugin) => plugin.api?.vxrnNative);
576
+ }
577
+ };
571
578
  if (!nativeDisabled) {
572
579
  const viteBundlerOptions = nativeOptions?.bundler === "metro" ? void 0 : nativeOptions?.bundlerOptions;
573
- globalThis.__vxrnAddNativePlugins = (platform) => [
574
- (0, import_vxrn.backgroundComputationPlugin)("native"),
575
- (0, import_vxrn.workletImportsPlugin)({}),
576
- ...nativeApp ? [{
577
- name: "one:externalize-expo-for-native-app",
578
- resolveId(source) {
579
- if (/^(?:expo(?:-[^/]+)?|@expo\/[^/]+)(?:\/|$)/.test(source)) {
580
- return {
581
- id: source,
582
- external: true
583
- };
580
+ globalThis.__vxrnAddNativePlugins = (platform) => {
581
+ const listed = [
582
+ (0, import_vxrn.backgroundComputationPlugin)("native"),
583
+ (0, import_vxrn.workletImportsPlugin)({}),
584
+ ...nativeApp ? [{
585
+ name: "one:externalize-expo-for-native-app",
586
+ resolveId(source) {
587
+ if (/^(?:expo(?:-[^/]+)?|@expo\/[^/]+)(?:\/|$)/.test(source)) {
588
+ return {
589
+ id: source,
590
+ external: true
591
+ };
592
+ }
584
593
  }
585
- }
586
- }] : [],
587
- createAliasPlugin(withAbsorbedAliases(options.alias), platform),
588
- (0, import_clientTreeShakePlugin.clientTreeShakePlugin)({
589
- runtime: "rolldown",
590
- routerRoot
591
- }),
592
- ...viteBundlerOptions?.plugins ?? [],
593
- (0, import_swiftPackagePlugin.swiftPackagePlugin)(platform, root),
594
- (0, import_kotlinSourcePlugin.kotlinSourcePlugin)(platform, root)
595
- ];
594
+ }] : [],
595
+ createAliasPlugin(withAbsorbedAliases(options.alias), platform),
596
+ (0, import_clientTreeShakePlugin.clientTreeShakePlugin)({
597
+ runtime: "rolldown",
598
+ routerRoot
599
+ }),
600
+ ...viteBundlerOptions?.plugins ?? []
601
+ ];
602
+ const listedNames = new Set(listed.map((plugin) => plugin.name));
603
+ return [
604
+ ...listed,
605
+ ...nativeFormPlugins.filter((plugin) => !listedNames.has(plugin.name)),
606
+ (0, import_swiftPackagePlugin.swiftPackagePlugin)(platform, root),
607
+ (0, import_kotlinSourcePlugin.kotlinSourcePlugin)(platform, root)
608
+ ];
609
+ };
596
610
  globalThis.__vxrnNativeUserDefine = {
597
611
  ...viteBundlerOptions?.define,
598
612
  ...nativeAppName && {
@@ -638,6 +652,7 @@ function one(options = {}) {
638
652
  ...devAndProdPlugins,
639
653
  ...inspectorPlugins,
640
654
  ...nativeWebDevAndProdPlugsin,
655
+ ...nativeDisabled ? [] : [nativeFormPluginsCapture],
641
656
  (0, import_fileSystemRouterPlugin.createFileSystemRouterPlugin)(options, routeIndex),
642
657
  (0, import_generateFileSystemRouteTypesPlugin.generateFileSystemRouteTypesPlugin)(options, routeIndex),
643
658
  (0, import_fixDependenciesPlugin.fixDependenciesPlugin)(options.patches),
@@ -701,11 +701,21 @@ function one() {
701
701
  ...dedupeSymlinks ? [ssrSymlinkDedupPlugin] : []
702
702
  ];
703
703
  var nativeWebDevAndProdPlugsin = [(0, import_clientTreeShakePlugin.clientTreeShakePlugin)({ routerRoot })];
704
+ var nativeFormPlugins = [];
705
+ var nativeFormPluginsCapture = {
706
+ name: "one:native-form-plugins",
707
+ configResolved(config) {
708
+ nativeFormPlugins = config.plugins.filter(function(plugin) {
709
+ var _plugin_api;
710
+ return (_plugin_api = plugin.api) === null || _plugin_api === void 0 ? void 0 : _plugin_api.vxrnNative;
711
+ });
712
+ }
713
+ };
704
714
  if (!nativeDisabled) {
705
715
  var viteBundlerOptions = (nativeOptions === null || nativeOptions === void 0 ? void 0 : nativeOptions.bundler) === "metro" ? void 0 : nativeOptions === null || nativeOptions === void 0 ? void 0 : nativeOptions.bundlerOptions;
706
716
  globalThis.__vxrnAddNativePlugins = function(platform) {
707
717
  var _ref2;
708
- return [
718
+ var listed = [
709
719
  (0, import_vxrn.backgroundComputationPlugin)("native"),
710
720
  (0, import_vxrn.workletImportsPlugin)({}),
711
721
  ...nativeApp ? [{
@@ -724,7 +734,16 @@ function one() {
724
734
  runtime: "rolldown",
725
735
  routerRoot
726
736
  }),
727
- ...(_ref2 = viteBundlerOptions === null || viteBundlerOptions === void 0 ? void 0 : viteBundlerOptions.plugins) !== null && _ref2 !== void 0 ? _ref2 : [],
737
+ ...(_ref2 = viteBundlerOptions === null || viteBundlerOptions === void 0 ? void 0 : viteBundlerOptions.plugins) !== null && _ref2 !== void 0 ? _ref2 : []
738
+ ];
739
+ var listedNames = new Set(listed.map(function(plugin) {
740
+ return plugin.name;
741
+ }));
742
+ return [
743
+ ...listed,
744
+ ...nativeFormPlugins.filter(function(plugin) {
745
+ return !listedNames.has(plugin.name);
746
+ }),
728
747
  (0, import_swiftPackagePlugin.swiftPackagePlugin)(platform, root),
729
748
  (0, import_kotlinSourcePlugin.kotlinSourcePlugin)(platform, root)
730
749
  ];
@@ -783,6 +802,7 @@ function one() {
783
802
  ...devAndProdPlugins,
784
803
  ...inspectorPlugins,
785
804
  ...nativeWebDevAndProdPlugsin,
805
+ ...nativeDisabled ? [] : [nativeFormPluginsCapture],
786
806
  (0, import_fileSystemRouterPlugin.createFileSystemRouterPlugin)(options, routeIndex),
787
807
  (0, import_generateFileSystemRouteTypesPlugin.generateFileSystemRouteTypesPlugin)(options, routeIndex),
788
808
  (0, import_fixDependenciesPlugin.fixDependenciesPlugin)(options.patches),
@@ -701,11 +701,21 @@ function one() {
701
701
  ...dedupeSymlinks ? [ssrSymlinkDedupPlugin] : []
702
702
  ];
703
703
  var nativeWebDevAndProdPlugsin = [(0, import_clientTreeShakePlugin.clientTreeShakePlugin)({ routerRoot })];
704
+ var nativeFormPlugins = [];
705
+ var nativeFormPluginsCapture = {
706
+ name: "one:native-form-plugins",
707
+ configResolved(config) {
708
+ nativeFormPlugins = config.plugins.filter(function(plugin) {
709
+ var _plugin_api;
710
+ return (_plugin_api = plugin.api) === null || _plugin_api === void 0 ? void 0 : _plugin_api.vxrnNative;
711
+ });
712
+ }
713
+ };
704
714
  if (!nativeDisabled) {
705
715
  var viteBundlerOptions = (nativeOptions === null || nativeOptions === void 0 ? void 0 : nativeOptions.bundler) === "metro" ? void 0 : nativeOptions === null || nativeOptions === void 0 ? void 0 : nativeOptions.bundlerOptions;
706
716
  globalThis.__vxrnAddNativePlugins = function(platform) {
707
717
  var _ref2;
708
- return [
718
+ var listed = [
709
719
  (0, import_vxrn.backgroundComputationPlugin)("native"),
710
720
  (0, import_vxrn.workletImportsPlugin)({}),
711
721
  ...nativeApp ? [{
@@ -724,7 +734,16 @@ function one() {
724
734
  runtime: "rolldown",
725
735
  routerRoot
726
736
  }),
727
- ...(_ref2 = viteBundlerOptions === null || viteBundlerOptions === void 0 ? void 0 : viteBundlerOptions.plugins) !== null && _ref2 !== void 0 ? _ref2 : [],
737
+ ...(_ref2 = viteBundlerOptions === null || viteBundlerOptions === void 0 ? void 0 : viteBundlerOptions.plugins) !== null && _ref2 !== void 0 ? _ref2 : []
738
+ ];
739
+ var listedNames = new Set(listed.map(function(plugin) {
740
+ return plugin.name;
741
+ }));
742
+ return [
743
+ ...listed,
744
+ ...nativeFormPlugins.filter(function(plugin) {
745
+ return !listedNames.has(plugin.name);
746
+ }),
728
747
  (0, import_swiftPackagePlugin.swiftPackagePlugin)(platform, root),
729
748
  (0, import_kotlinSourcePlugin.kotlinSourcePlugin)(platform, root)
730
749
  ];
@@ -783,6 +802,7 @@ function one() {
783
802
  ...devAndProdPlugins,
784
803
  ...inspectorPlugins,
785
804
  ...nativeWebDevAndProdPlugsin,
805
+ ...nativeDisabled ? [] : [nativeFormPluginsCapture],
786
806
  (0, import_fileSystemRouterPlugin.createFileSystemRouterPlugin)(options, routeIndex),
787
807
  (0, import_generateFileSystemRouteTypesPlugin.generateFileSystemRouteTypesPlugin)(options, routeIndex),
788
808
  (0, import_fixDependenciesPlugin.fixDependenciesPlugin)(options.patches),