@php-wasm/web-service-worker 3.1.4 → 3.1.5

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.
Files changed (3) hide show
  1. package/index.cjs +1 -1
  2. package/index.js +107 -97
  3. package/package.json +3 -3
package/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("@php-wasm/scopes"),L=25e3;let P=0;function T(e,t,...o){const s=w();return e.postMessage({...t,requestId:s},...o),s}function w(){return++P}function m(e,t,o=L){return new Promise((s,n)=>{const r=i=>{i.data.type==="response"&&i.data.requestId===t&&(e.removeEventListener("message",r),clearTimeout(a),s(i.data.response))},a=setTimeout(()=>{n(new Error("Request timed out")),e.removeEventListener("message",r)},o);e.addEventListener("message",r)})}function U(e,t){return{type:"response",requestId:e,response:t}}async function x(e){let t=new URL(e.request.url);if(!y.isURLScoped(t))try{const c=new URL(e.request.referrer);t=y.setURLScope(t,y.getURLScope(c))}catch{}const o=e.request.headers.get("content-type"),s=e.request.method==="POST"?new Uint8Array(await e.request.clone().arrayBuffer()):void 0,n={};for(const c of e.request.headers.entries())n[c[0]]=c[1];let r;try{const c={method:"request",args:[{body:s,url:t.toString(),method:e.request.method,headers:{...n,Host:t.host,"User-agent":self.navigator.userAgent,"Content-type":o}}]},d=y.getURLScope(t);if(d===null)throw new Error(`The URL ${t.toString()} is not scoped. This should not happen.`);const p=await R(c,d);if(r=await m(self,p),delete r.headers["x-frame-options"],r.headers["content-security-policy"]){const l=r.headers["content-security-policy"].map(u=>E("frame-ancestors",u)).filter(u=>u.trim().length>0);l.length>0?r.headers["content-security-policy"]=l:delete r.headers["content-security-policy"]}}catch(c){throw console.error(c,{url:t.toString()}),c}if(r.httpStatusCode>=300&&r.httpStatusCode<=399&&r.headers.location)return Response.redirect(new URL(r.headers.location[0],t.toString()),r.httpStatusCode);const i=[101,103,204,205,304].includes(r.httpStatusCode)?null:r.bytes;return new Response(i,{headers:r.headers,status:r.httpStatusCode})}async function R(e,t){const o=w();for(const s of await self.clients.matchAll({includeUncontrolled:!0}))s.postMessage({...e,scope:t,requestId:o});return o}async function h(e,t){let o;return["GET","HEAD"].includes(e.method)||"body"in t?o=void 0:!e.bodyUsed&&e.body?o=e.body:o=await e.arrayBuffer(),new Request(t.url||e.url,{body:o,method:e.method,headers:e.headers,referrer:e.referrer,referrerPolicy:e.referrerPolicy,mode:e.mode==="navigate"?"same-origin":e.mode,credentials:e.credentials,cache:e.cache,redirect:e.redirect,integrity:e.integrity,...o&&{duplex:"half"},...t})}async function g(e){if(!e.body)return[e,e];const[t,o]=e.body.tee();return[await h(e,{body:t,duplex:"half"}),await h(e,{body:o,duplex:"half"})]}function q(e){const t={};return e.headers.forEach((o,s)=>{t[s]=o}),t}function E(e,t){const o=/^[\u{9}\u{A}\u{C}\u{D}\u{20}]+/u,s=/[\u{9}\u{A}\u{C}\u{D}\u{20}]+$/u,n=/[\u{9}\u{A}\u{C}\u{D}\u{20}]/u;return t.split(";").filter(r=>{const a=r.replace(o,"").replace(s,""),[i]=a.split(n,1);return i.toLowerCase()!==e.toLowerCase()}).join(";")}class b extends Error{constructor(t,o,s){super(`Could not fetch ${t} – your network appears to be blocking this request (HTTP ${o}). This often happens on school, university, or corporate networks. Try switching to a different network or using a VPN.`),this.name="FirewallInterferenceError",this.url=t,this.status=o,this.statusText=s}}const H="X-Playground-Cors-Proxy";async function A(e,t,o,s){var p;let n=typeof e=="string"?new Request(e,t):e;const r=s?new URL(s):null;let a=r?new URL(n.url,r):new URL(n.url);if(a.hostname==="localhost"||a.hostname==="127.0.0.1"||a.hostname==="[::1]"||a.hostname==="::1")return await fetch(n);if(a.protocol==="http:"){a.protocol="https:";const l=a.toString();n=await h(n,{url:l}),a=new URL(l)}if(!o)return await fetch(n);if(r&&a.protocol===r.protocol&&a.hostname===r.hostname&&a.port===r.port&&a.pathname.startsWith(r.pathname))return await fetch(n);const[c,d]=await g(n);try{return await fetch(c)}catch{const u=((p=new Headers(d.headers).get("x-cors-proxy-allowed-request-headers"))==null?void 0:p.split(","))||[],C=u.includes("authorization")||u.includes("cookie"),S=await h(d,{url:`${o}${n.url}`,...C&&{credentials:"include"}}),f=await fetch(S,t);if(!f.headers.has(H))throw new b(n.url,f.status,f.statusText);return f}}exports.FirewallInterferenceError=b;exports.awaitReply=m;exports.broadcastMessageExpectReply=R;exports.cloneRequest=h;exports.convertFetchEventToPHPRequest=x;exports.fetchWithCorsProxy=A;exports.getNextRequestId=w;exports.getRequestHeaders=q;exports.postMessageExpectReply=T;exports.removeContentSecurityPolicyDirective=E;exports.responseTo=U;exports.teeRequest=g;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("@php-wasm/scopes"),U=25e3;let P=0;function T(e,t,...r){const s=R();return e.postMessage({...t,requestId:s},...r),s}function R(){return++P}function m(e,t,r=U){return new Promise((s,n)=>{const o=i=>{i.data.type==="response"&&i.data.requestId===t&&(e.removeEventListener("message",o),clearTimeout(a),s(i.data.response))},a=setTimeout(()=>{n(new Error("Request timed out")),e.removeEventListener("message",o)},r);e.addEventListener("message",o)})}function x(e,t){return{type:"response",requestId:e,response:t}}async function q(e){let t=new URL(e.request.url);if(!w.isURLScoped(t))try{const c=new URL(e.request.referrer);t=w.setURLScope(t,w.getURLScope(c))}catch{}const r=e.request.headers.get("content-type"),s=e.request.method==="POST"?new Uint8Array(await e.request.clone().arrayBuffer()):void 0,n={};for(const c of e.request.headers.entries())n[c[0]]=c[1];let o;try{const c={method:"request",args:[{body:s,url:t.toString(),method:e.request.method,headers:{...n,Host:t.host,"User-agent":self.navigator.userAgent,"Content-type":r}}]},h=w.getURLScope(t);if(h===null)throw new Error(`The URL ${t.toString()} is not scoped. This should not happen.`);const f=await g(c,h);if(o=await m(self,f),delete o.headers["x-frame-options"],o.headers["content-security-policy"]){const l=o.headers["content-security-policy"].map(u=>E("frame-ancestors",u)).filter(u=>u.trim().length>0);l.length>0?o.headers["content-security-policy"]=l:delete o.headers["content-security-policy"]}}catch(c){throw console.error(c,{url:t.toString()}),c}if(o.httpStatusCode>=300&&o.httpStatusCode<=399&&o.headers.location)return Response.redirect(new URL(o.headers.location[0],t.toString()),o.httpStatusCode);const i=[101,103,204,205,304].includes(o.httpStatusCode)?null:o.bytes;return new Response(i,{headers:o.headers,status:o.httpStatusCode})}async function g(e,t){const r=R();for(const s of await self.clients.matchAll({includeUncontrolled:!0}))s.postMessage({...e,scope:t,requestId:r});return r}async function d(e,t){let r;return["GET","HEAD"].includes(e.method)||"body"in t?r=void 0:!e.bodyUsed&&e.body?r=e.body:r=await e.arrayBuffer(),new Request(t.url||e.url,{body:r,method:e.method,headers:e.headers,referrer:e.referrer,referrerPolicy:e.referrerPolicy,mode:e.mode==="navigate"?"same-origin":e.mode,credentials:e.credentials,cache:e.cache,redirect:e.redirect,integrity:e.integrity,...r instanceof ReadableStream&&{duplex:"half"},...t})}async function b(e){if(!e.body)return[e,e];const[t,r]=e.body.tee();return[await d(e,{body:t,duplex:"half"}),await d(e,{body:r,duplex:"half"})]}function H(e){const t={};return e.headers.forEach((r,s)=>{t[s]=r}),t}function E(e,t){const r=/^[\u{9}\u{A}\u{C}\u{D}\u{20}]+/u,s=/[\u{9}\u{A}\u{C}\u{D}\u{20}]+$/u,n=/[\u{9}\u{A}\u{C}\u{D}\u{20}]/u;return t.split(";").filter(o=>{const a=o.replace(r,"").replace(s,""),[i]=a.split(n,1);return i.toLowerCase()!==e.toLowerCase()}).join(";")}class S extends Error{constructor(t,r,s){super(`Could not fetch ${t} – your network appears to be blocking this request (HTTP ${r}). This often happens on school, university, or corporate networks. Try switching to a different network or using a VPN.`),this.name="FirewallInterferenceError",this.url=t,this.status=r,this.statusText=s}}const v="X-Playground-Cors-Proxy";async function A(e,t,r,s){var f;let n=typeof e=="string"?new Request(e,t):e;const o=s?new URL(s):null;let a=o?new URL(n.url,o):new URL(n.url);if(a.hostname==="localhost"||a.hostname==="127.0.0.1"||a.hostname==="[::1]"||a.hostname==="::1")return await p(n);if(a.protocol==="http:"){a.protocol="https:";const l=a.toString();n=await d(n,{url:l}),a=new URL(l)}if(!r)return await p(n);if(o&&a.protocol===o.protocol&&a.hostname===o.hostname&&a.port===o.port&&a.pathname.startsWith(o.pathname))return await p(n);const[c,h]=await b(n);try{return await p(c)}catch{const u=((f=new Headers(h.headers).get("x-cors-proxy-allowed-request-headers"))==null?void 0:f.split(","))||[],C=u.includes("authorization")||u.includes("cookie"),L=await d(h,{url:`${r}${n.url}`,...C&&{credentials:"include"}}),y=await p(L,t);if(!y.headers.has(v))throw new S(n.url,y.status,y.statusText);return y}}async function p(e,t){let r=t?new Request(e,t):e;if(new URL(r.url).protocol==="http:"&&r.body){const s=await new Response(r.body).arrayBuffer();r=await d(r,{body:s})}return fetch(r)}exports.FirewallInterferenceError=S;exports.awaitReply=m;exports.broadcastMessageExpectReply=g;exports.cloneRequest=d;exports.convertFetchEventToPHPRequest=q;exports.fetchWithCorsProxy=A;exports.getNextRequestId=R;exports.getRequestHeaders=H;exports.postMessageExpectReply=T;exports.removeContentSecurityPolicyDirective=E;exports.responseTo=x;exports.teeRequest=b;
package/index.js CHANGED
@@ -1,50 +1,50 @@
1
- import { isURLScoped as R, setURLScope as C, getURLScope as y } from "@php-wasm/scopes";
1
+ import { isURLScoped as b, setURLScope as C, getURLScope as w } from "@php-wasm/scopes";
2
2
  const E = 25e3;
3
- let b = 0;
4
- function H(e, t, ...o) {
5
- const s = w();
3
+ let L = 0;
4
+ function H(e, t, ...r) {
5
+ const s = m();
6
6
  return e.postMessage(
7
7
  {
8
8
  ...t,
9
9
  requestId: s
10
10
  },
11
- ...o
11
+ ...r
12
12
  ), s;
13
13
  }
14
- function w() {
15
- return ++b;
14
+ function m() {
15
+ return ++L;
16
16
  }
17
- function L(e, t, o = E) {
17
+ function S(e, t, r = E) {
18
18
  return new Promise((s, n) => {
19
- const r = (i) => {
20
- i.data.type === "response" && i.data.requestId === t && (e.removeEventListener("message", r), clearTimeout(a), s(i.data.response));
19
+ const o = (c) => {
20
+ c.data.type === "response" && c.data.requestId === t && (e.removeEventListener("message", o), clearTimeout(a), s(c.data.response));
21
21
  }, a = setTimeout(() => {
22
- n(new Error("Request timed out")), e.removeEventListener("message", r);
23
- }, o);
24
- e.addEventListener("message", r);
22
+ n(new Error("Request timed out")), e.removeEventListener("message", o);
23
+ }, r);
24
+ e.addEventListener("message", o);
25
25
  });
26
26
  }
27
- function q(e, t) {
27
+ function I(e, t) {
28
28
  return {
29
29
  type: "response",
30
30
  requestId: e,
31
31
  response: t
32
32
  };
33
33
  }
34
- async function I(e) {
34
+ async function O(e) {
35
35
  let t = new URL(e.request.url);
36
- if (!R(t))
36
+ if (!b(t))
37
37
  try {
38
- const c = new URL(e.request.referrer);
39
- t = C(t, y(c));
38
+ const i = new URL(e.request.referrer);
39
+ t = C(t, w(i));
40
40
  } catch {
41
41
  }
42
- const o = e.request.headers.get("content-type"), s = e.request.method === "POST" ? new Uint8Array(await e.request.clone().arrayBuffer()) : void 0, n = {};
43
- for (const c of e.request.headers.entries())
44
- n[c[0]] = c[1];
45
- let r;
42
+ const r = e.request.headers.get("content-type"), s = e.request.method === "POST" ? new Uint8Array(await e.request.clone().arrayBuffer()) : void 0, n = {};
43
+ for (const i of e.request.headers.entries())
44
+ n[i[0]] = i[1];
45
+ let o;
46
46
  try {
47
- const c = {
47
+ const i = {
48
48
  method: "request",
49
49
  args: [
50
50
  {
@@ -57,43 +57,43 @@ async function I(e) {
57
57
  // Safari and Firefox don't make the User-Agent header
58
58
  // available in the fetch event. Let's add it manually:
59
59
  "User-agent": self.navigator.userAgent,
60
- "Content-type": o
60
+ "Content-type": r
61
61
  }
62
62
  }
63
63
  ]
64
- }, d = y(t);
64
+ }, d = w(t);
65
65
  if (d === null)
66
66
  throw new Error(
67
67
  `The URL ${t.toString()} is not scoped. This should not happen.`
68
68
  );
69
- const h = await U(c, d);
70
- if (r = await L(self, h), delete r.headers["x-frame-options"], r.headers["content-security-policy"]) {
71
- const l = r.headers["content-security-policy"].map(
72
- (u) => T(
69
+ const f = await U(i, d);
70
+ if (o = await S(self, f), delete o.headers["x-frame-options"], o.headers["content-security-policy"]) {
71
+ const l = o.headers["content-security-policy"].map(
72
+ (u) => x(
73
73
  "frame-ancestors",
74
74
  u
75
75
  )
76
76
  ).filter((u) => u.trim().length > 0);
77
- l.length > 0 ? r.headers["content-security-policy"] = l : delete r.headers["content-security-policy"];
77
+ l.length > 0 ? o.headers["content-security-policy"] = l : delete o.headers["content-security-policy"];
78
78
  }
79
- } catch (c) {
80
- throw console.error(c, { url: t.toString() }), c;
79
+ } catch (i) {
80
+ throw console.error(i, { url: t.toString() }), i;
81
81
  }
82
- if (r.httpStatusCode >= 300 && r.httpStatusCode <= 399 && r.headers.location)
82
+ if (o.httpStatusCode >= 300 && o.httpStatusCode <= 399 && o.headers.location)
83
83
  return Response.redirect(
84
- new URL(r.headers.location[0], t.toString()),
85
- r.httpStatusCode
84
+ new URL(o.headers.location[0], t.toString()),
85
+ o.httpStatusCode
86
86
  );
87
- const i = [101, 103, 204, 205, 304].includes(
88
- r.httpStatusCode
89
- ) ? null : r.bytes;
90
- return new Response(i, {
91
- headers: r.headers,
92
- status: r.httpStatusCode
87
+ const c = [101, 103, 204, 205, 304].includes(
88
+ o.httpStatusCode
89
+ ) ? null : o.bytes;
90
+ return new Response(c, {
91
+ headers: o.headers,
92
+ status: o.httpStatusCode
93
93
  });
94
94
  }
95
95
  async function U(e, t) {
96
- const o = w();
96
+ const r = m();
97
97
  for (const s of await self.clients.matchAll({
98
98
  // Sometimes the client that triggered the current fetch()
99
99
  // event is considered uncontrolled in Google Chrome. This
@@ -111,14 +111,14 @@ async function U(e, t) {
111
111
  * helps WASM workers ignore requests meant for other WASM workers.
112
112
  */
113
113
  scope: t,
114
- requestId: o
114
+ requestId: r
115
115
  });
116
- return o;
116
+ return r;
117
117
  }
118
- async function f(e, t) {
119
- let o;
120
- return ["GET", "HEAD"].includes(e.method) || "body" in t ? o = void 0 : !e.bodyUsed && e.body ? o = e.body : o = await e.arrayBuffer(), new Request(t.url || e.url, {
121
- body: o,
118
+ async function p(e, t) {
119
+ let r;
120
+ return ["GET", "HEAD"].includes(e.method) || "body" in t ? r = void 0 : !e.bodyUsed && e.body ? r = e.body : r = await e.arrayBuffer(), new Request(t.url || e.url, {
121
+ body: r,
122
122
  method: e.method,
123
123
  headers: e.headers,
124
124
  referrer: e.referrer,
@@ -128,88 +128,98 @@ async function f(e, t) {
128
128
  cache: e.cache,
129
129
  redirect: e.redirect,
130
130
  integrity: e.integrity,
131
- ...o && { duplex: "half" },
131
+ ...r instanceof ReadableStream && { duplex: "half" },
132
132
  ...t
133
133
  });
134
134
  }
135
- async function S(e) {
135
+ async function T(e) {
136
136
  if (!e.body)
137
137
  return [e, e];
138
- const [t, o] = e.body.tee();
138
+ const [t, r] = e.body.tee();
139
139
  return [
140
- await f(e, { body: t, duplex: "half" }),
141
- await f(e, { body: o, duplex: "half" })
140
+ await p(e, { body: t, duplex: "half" }),
141
+ await p(e, { body: r, duplex: "half" })
142
142
  ];
143
143
  }
144
- function O(e) {
144
+ function D(e) {
145
145
  const t = {};
146
- return e.headers.forEach((o, s) => {
147
- t[s] = o;
146
+ return e.headers.forEach((r, s) => {
147
+ t[s] = r;
148
148
  }), t;
149
149
  }
150
- function T(e, t) {
151
- const o = /^[\u{9}\u{A}\u{C}\u{D}\u{20}]+/u, s = /[\u{9}\u{A}\u{C}\u{D}\u{20}]+$/u, n = /[\u{9}\u{A}\u{C}\u{D}\u{20}]/u;
152
- return t.split(";").filter((r) => {
153
- const a = r.replace(o, "").replace(s, ""), [i] = a.split(
150
+ function x(e, t) {
151
+ const r = /^[\u{9}\u{A}\u{C}\u{D}\u{20}]+/u, s = /[\u{9}\u{A}\u{C}\u{D}\u{20}]+$/u, n = /[\u{9}\u{A}\u{C}\u{D}\u{20}]/u;
152
+ return t.split(";").filter((o) => {
153
+ const a = o.replace(r, "").replace(s, ""), [c] = a.split(
154
154
  n,
155
155
  // The directive name is the first token.
156
156
  1
157
157
  );
158
- return i.toLowerCase() !== e.toLowerCase();
158
+ return c.toLowerCase() !== e.toLowerCase();
159
159
  }).join(";");
160
160
  }
161
- class x extends Error {
162
- constructor(t, o, s) {
161
+ class P extends Error {
162
+ constructor(t, r, s) {
163
163
  super(
164
- `Could not fetch ${t} – your network appears to be blocking this request (HTTP ${o}). This often happens on school, university, or corporate networks. Try switching to a different network or using a VPN.`
165
- ), this.name = "FirewallInterferenceError", this.url = t, this.status = o, this.statusText = s;
164
+ `Could not fetch ${t} – your network appears to be blocking this request (HTTP ${r}). This often happens on school, university, or corporate networks. Try switching to a different network or using a VPN.`
165
+ ), this.name = "FirewallInterferenceError", this.url = t, this.status = r, this.statusText = s;
166
166
  }
167
167
  }
168
- const P = "X-Playground-Cors-Proxy";
169
- async function D(e, t, o, s) {
170
- var h;
168
+ const A = "X-Playground-Cors-Proxy";
169
+ async function v(e, t, r, s) {
170
+ var f;
171
171
  let n = typeof e == "string" ? new Request(e, t) : e;
172
- const r = s ? new URL(s) : null;
173
- let a = r ? new URL(n.url, r) : new URL(n.url);
172
+ const o = s ? new URL(s) : null;
173
+ let a = o ? new URL(n.url, o) : new URL(n.url);
174
174
  if (a.hostname === "localhost" || a.hostname === "127.0.0.1" || a.hostname === "[::1]" || a.hostname === "::1")
175
- return await fetch(n);
175
+ return await h(n);
176
176
  if (a.protocol === "http:") {
177
177
  a.protocol = "https:";
178
178
  const l = a.toString();
179
- n = await f(n, { url: l }), a = new URL(l);
179
+ n = await p(n, { url: l }), a = new URL(l);
180
180
  }
181
- if (!o)
182
- return await fetch(n);
183
- if (r && a.protocol === r.protocol && a.hostname === r.hostname && a.port === r.port && a.pathname.startsWith(r.pathname))
184
- return await fetch(n);
185
- const [c, d] = await S(n);
181
+ if (!r)
182
+ return await h(n);
183
+ if (o && a.protocol === o.protocol && a.hostname === o.hostname && a.port === o.port && a.pathname.startsWith(o.pathname))
184
+ return await h(n);
185
+ const [i, d] = await T(n);
186
186
  try {
187
- return await fetch(c);
187
+ return await h(i);
188
188
  } catch {
189
- const u = ((h = new Headers(d.headers).get("x-cors-proxy-allowed-request-headers")) == null ? void 0 : h.split(",")) || [], m = u.includes("authorization") || u.includes("cookie"), g = await f(d, {
190
- url: `${o}${n.url}`,
191
- ...m && { credentials: "include" }
192
- }), p = await fetch(g, t);
193
- if (!p.headers.has(P))
194
- throw new x(
189
+ const u = ((f = new Headers(d.headers).get("x-cors-proxy-allowed-request-headers")) == null ? void 0 : f.split(",")) || [], R = u.includes("authorization") || u.includes("cookie"), g = await p(d, {
190
+ url: `${r}${n.url}`,
191
+ ...R && { credentials: "include" }
192
+ }), y = await h(g, t);
193
+ if (!y.headers.has(A))
194
+ throw new P(
195
195
  n.url,
196
- p.status,
197
- p.statusText
196
+ y.status,
197
+ y.statusText
198
198
  );
199
- return p;
199
+ return y;
200
+ }
201
+ }
202
+ async function h(e, t) {
203
+ let r = t ? new Request(e, t) : e;
204
+ if (new URL(r.url).protocol === "http:" && r.body) {
205
+ const s = await new Response(r.body).arrayBuffer();
206
+ r = await p(r, {
207
+ body: s
208
+ });
200
209
  }
210
+ return fetch(r);
201
211
  }
202
212
  export {
203
- x as FirewallInterferenceError,
204
- L as awaitReply,
213
+ P as FirewallInterferenceError,
214
+ S as awaitReply,
205
215
  U as broadcastMessageExpectReply,
206
- f as cloneRequest,
207
- I as convertFetchEventToPHPRequest,
208
- D as fetchWithCorsProxy,
209
- w as getNextRequestId,
210
- O as getRequestHeaders,
216
+ p as cloneRequest,
217
+ O as convertFetchEventToPHPRequest,
218
+ v as fetchWithCorsProxy,
219
+ m as getNextRequestId,
220
+ D as getRequestHeaders,
211
221
  H as postMessageExpectReply,
212
- T as removeContentSecurityPolicyDirective,
213
- q as responseTo,
214
- S as teeRequest
222
+ x as removeContentSecurityPolicyDirective,
223
+ I as responseTo,
224
+ T as teeRequest
215
225
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@php-wasm/web-service-worker",
3
- "version": "3.1.4",
3
+ "version": "3.1.5",
4
4
  "description": "PHP.wasm – service worker utils",
5
5
  "repository": {
6
6
  "type": "git",
@@ -31,7 +31,7 @@
31
31
  "main": "./index.cjs",
32
32
  "module": "./index.js",
33
33
  "license": "GPL-2.0-or-later",
34
- "gitHead": "a7cde6f2a2d3cef27f51f24e9ddadbe5ca05344b",
34
+ "gitHead": "e10df5885055e97c87ce88fe5e9d8d4ac3e700da",
35
35
  "engines": {
36
36
  "node": ">=20.10.0",
37
37
  "npm": ">=10.2.3"
@@ -50,6 +50,6 @@
50
50
  "glob": "^9.3.0"
51
51
  },
52
52
  "dependencies": {
53
- "@php-wasm/scopes": "3.1.4"
53
+ "@php-wasm/scopes": "3.1.5"
54
54
  }
55
55
  }