@php-wasm/logger 0.9.38 → 0.9.40
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.
- package/index.cjs +3 -3
- package/index.js +38 -37
- package/lib/collectors/collect-php-logs.d.ts +2 -1
- package/lib/logger.d.ts +1 -0
- package/lib/types.d.ts +22 -0
- package/package.json +3 -3
package/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("@php-wasm/node-polyfills");const m="playground-log",
|
|
2
|
-
`):JSON.stringify(e,null,2),p=[],
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("@php-wasm/node-polyfills");const m="playground-log",d=(e,...r)=>{y.dispatchEvent(new CustomEvent(m,{detail:{log:e,args:r}}))},b=(e,...r)=>{switch(typeof e.message=="string"?Reflect.set(e,"message",a(e.message)):e.message.message&&typeof e.message.message=="string"&&Reflect.set(e.message,"message",a(e.message.message)),e.severity){case"Debug":console.debug(e.message,...r);break;case"Info":console.info(e.message,...r);break;case"Warn":console.warn(e.message,...r);break;case"Error":console.error(e.message,...r);break;case"Fatal":console.error(e.message,...r);break;default:console.log(e.message,...r)}},v=e=>e instanceof Error?[e.message,e.stack].join(`
|
|
2
|
+
`):JSON.stringify(e,null,2),p=[],l=e=>{p.push(e)},c=e=>{if(e.raw===!0)l(e.message);else{const r=E(typeof e.message=="object"?v(e.message):e.message,e.severity??"Info",e.prefix??"JavaScript");l(r)}};let n=0;const g="/wordpress/wp-content/debug.log",T=async e=>await e.fileExists(g)?await e.readFileAsText(g):"",M=(e,r)=>{r.addEventListener("request.end",async()=>{const s=await T(r);if(s.length>n){const t=s.substring(n);e.logMessage({message:t,raw:!0}),n=s.length}}),r.addEventListener("request.error",s=>{s=s,s.error&&(e.logMessage({message:`${s.error.message} ${s.error.stack}`,severity:"Fatal",prefix:s.source==="request"?"PHP":"WASM Crash"}),e.dispatchEvent(new CustomEvent(e.fatalErrorEvent,{detail:{logs:e.getLogs(),source:s.source}})))})};class h extends EventTarget{constructor(r=[]){super(),this.handlers=r,this.fatalErrorEvent="playground-fatal-error"}getLogs(){return this.handlers.includes(c)?[...p]:(this.error(`Logs aren't stored because the logToMemory handler isn't registered.
|
|
3
3
|
If you're using a custom logger instance, make sure to register logToMemory handler.
|
|
4
|
-
`),[])}logMessage(r,...s){for(const t of this.handlers)t(r,...s)}log(r,...s){this.logMessage({message:r,severity:void 0,prefix:"JavaScript",raw:!1},...s)}debug(r,...s){this.logMessage({message:r,severity:"Debug",prefix:"JavaScript",raw:!1},...s)}info(r,...s){this.logMessage({message:r,severity:"Info",prefix:"JavaScript",raw:!1},...s)}warn(r,...s){this.logMessage({message:r,severity:"Warn",prefix:"JavaScript",raw:!1},...s)}error(r,...s){this.logMessage({message:r,severity:"Error",prefix:"JavaScript",raw:!1},...s)}}const
|
|
4
|
+
`),[])}logMessage(r,...s){for(const t of this.handlers)t(r,...s)}log(r,...s){this.logMessage({message:r,severity:void 0,prefix:"JavaScript",raw:!1},...s)}debug(r,...s){this.logMessage({message:r,severity:"Debug",prefix:"JavaScript",raw:!1},...s)}info(r,...s){this.logMessage({message:r,severity:"Info",prefix:"JavaScript",raw:!1},...s)}warn(r,...s){this.logMessage({message:r,severity:"Warn",prefix:"JavaScript",raw:!1},...s)}error(r,...s){this.logMessage({message:r,severity:"Error",prefix:"JavaScript",raw:!1},...s)}}const P=()=>{try{if(process.env.NODE_ENV==="test")return[c,d]}catch{}return[c,b,d]},y=new h(P()),a=e=>e.replace(/\t/g,""),E=(e,r,s)=>{const t=new Date,o=new Intl.DateTimeFormat("en-GB",{year:"numeric",month:"short",day:"2-digit",timeZone:"UTC"}).format(t).replace(/ /g,"-"),w=new Intl.DateTimeFormat("en-GB",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1,timeZone:"UTC",timeZoneName:"short"}).format(t),L=o+" "+w;return e=a(e),`[${L}] ${s} ${r}: ${e}`},O=(e,r)=>{e.addEventListener(e.fatalErrorEvent,r)},S=(e,r)=>{e.logMessage({message:`${r.message} in ${r.filename} on line ${r.lineno}:${r.colno}`,severity:"Error"})},f=(e,r)=>{if(!(r!=null&&r.reason))return;const s=(r==null?void 0:r.reason.stack)??r.reason;e.logMessage({message:s,severity:"Error"})};let i=0;const k=e=>{navigator.serviceWorker.addEventListener("message",r=>{var s,t,o;((s=r.data)==null?void 0:s.numberOfOpenPlaygroundTabs)!==void 0&&i!==((t=r.data)==null?void 0:t.numberOfOpenPlaygroundTabs)&&(i=(o=r.data)==null?void 0:o.numberOfOpenPlaygroundTabs,e.debug(`Number of open Playground tabs is: ${i}`))})};let u=!1;const $=e=>{u||(k(e),!(typeof window>"u")&&(window.addEventListener("error",r=>S(e,r)),window.addEventListener("unhandledrejection",r=>f(e,r)),window.addEventListener("rejectionhandled",r=>f(e,r)),u=!0))},x=e=>{e.addEventListener("activate",()=>{e.clients.matchAll().then(r=>{const s={numberOfOpenPlaygroundTabs:r.filter(t=>t.frameType==="top-level").length};for(const t of r)t.postMessage(s)})})};exports.Logger=h;exports.addCrashListener=O;exports.collectPhpLogs=M;exports.collectWindowErrors=$;exports.errorLogPath=g;exports.formatLogEntry=E;exports.logEventType=m;exports.logger=y;exports.prepareLogMessage=a;exports.reportServiceWorkerMetrics=x;
|
package/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "@php-wasm/node-polyfills";
|
|
2
2
|
const E = "playground-log", d = (e, ...r) => {
|
|
3
|
-
|
|
3
|
+
T.dispatchEvent(
|
|
4
4
|
new CustomEvent(E, {
|
|
5
5
|
detail: {
|
|
6
6
|
log: e,
|
|
@@ -39,7 +39,7 @@ const E = "playground-log", d = (e, ...r) => {
|
|
|
39
39
|
if (e.raw === !0)
|
|
40
40
|
g(e.message);
|
|
41
41
|
else {
|
|
42
|
-
const r =
|
|
42
|
+
const r = M(
|
|
43
43
|
typeof e.message == "object" ? y(e.message) : e.message,
|
|
44
44
|
e.severity ?? "Info",
|
|
45
45
|
e.prefix ?? "JavaScript"
|
|
@@ -47,7 +47,33 @@ const E = "playground-log", d = (e, ...r) => {
|
|
|
47
47
|
g(r);
|
|
48
48
|
}
|
|
49
49
|
};
|
|
50
|
-
|
|
50
|
+
let o = 0;
|
|
51
|
+
const l = "/wordpress/wp-content/debug.log", b = async (e) => await e.fileExists(l) ? await e.readFileAsText(l) : "", k = (e, r) => {
|
|
52
|
+
r.addEventListener("request.end", async () => {
|
|
53
|
+
const s = await b(r);
|
|
54
|
+
if (s.length > o) {
|
|
55
|
+
const t = s.substring(o);
|
|
56
|
+
e.logMessage({
|
|
57
|
+
message: t,
|
|
58
|
+
raw: !0
|
|
59
|
+
}), o = s.length;
|
|
60
|
+
}
|
|
61
|
+
}), r.addEventListener("request.error", (s) => {
|
|
62
|
+
s = s, s.error && (e.logMessage({
|
|
63
|
+
message: `${s.error.message} ${s.error.stack}`,
|
|
64
|
+
severity: "Fatal",
|
|
65
|
+
prefix: s.source === "request" ? "PHP" : "WASM Crash"
|
|
66
|
+
}), e.dispatchEvent(
|
|
67
|
+
new CustomEvent(e.fatalErrorEvent, {
|
|
68
|
+
detail: {
|
|
69
|
+
logs: e.getLogs(),
|
|
70
|
+
source: s.source
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
));
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
class L extends EventTarget {
|
|
51
77
|
// constructor
|
|
52
78
|
constructor(r = []) {
|
|
53
79
|
super(), this.handlers = r, this.fatalErrorEvent = "playground-fatal-error";
|
|
@@ -159,14 +185,14 @@ class b extends EventTarget {
|
|
|
159
185
|
);
|
|
160
186
|
}
|
|
161
187
|
}
|
|
162
|
-
const
|
|
188
|
+
const v = () => {
|
|
163
189
|
try {
|
|
164
190
|
if (process.env.NODE_ENV === "test")
|
|
165
191
|
return [i, d];
|
|
166
192
|
} catch {
|
|
167
193
|
}
|
|
168
194
|
return [i, w, d];
|
|
169
|
-
},
|
|
195
|
+
}, T = new L(v()), c = (e) => e.replace(/\t/g, ""), M = (e, r, s) => {
|
|
170
196
|
const t = /* @__PURE__ */ new Date(), a = new Intl.DateTimeFormat("en-GB", {
|
|
171
197
|
year: "numeric",
|
|
172
198
|
month: "short",
|
|
@@ -181,34 +207,8 @@ const L = () => {
|
|
|
181
207
|
timeZoneName: "short"
|
|
182
208
|
}).format(t), h = a + " " + p;
|
|
183
209
|
return e = c(e), `[${h}] ${s} ${r}: ${e}`;
|
|
184
|
-
},
|
|
210
|
+
}, x = (e, r) => {
|
|
185
211
|
e.addEventListener(e.fatalErrorEvent, r);
|
|
186
|
-
};
|
|
187
|
-
let o = 0;
|
|
188
|
-
const l = "/wordpress/wp-content/debug.log", M = async (e) => await e.fileExists(l) ? await e.readFileAsText(l) : "", x = (e, r) => {
|
|
189
|
-
r.addEventListener("request.end", async () => {
|
|
190
|
-
const s = await M(r);
|
|
191
|
-
if (s.length > o) {
|
|
192
|
-
const t = s.substring(o);
|
|
193
|
-
e.logMessage({
|
|
194
|
-
message: t,
|
|
195
|
-
raw: !0
|
|
196
|
-
}), o = s.length;
|
|
197
|
-
}
|
|
198
|
-
}), r.addEventListener("request.error", (s) => {
|
|
199
|
-
s = s, s.error && (e.logMessage({
|
|
200
|
-
message: `${s.error.message} ${s.error.stack}`,
|
|
201
|
-
severity: "Fatal",
|
|
202
|
-
prefix: s.source === "request" ? "PHP" : "WASM Crash"
|
|
203
|
-
}), e.dispatchEvent(
|
|
204
|
-
new CustomEvent(e.fatalErrorEvent, {
|
|
205
|
-
detail: {
|
|
206
|
-
logs: e.getLogs(),
|
|
207
|
-
source: s.source
|
|
208
|
-
}
|
|
209
|
-
})
|
|
210
|
-
));
|
|
211
|
-
});
|
|
212
212
|
}, P = (e, r) => {
|
|
213
213
|
e.logMessage({
|
|
214
214
|
message: `${r.message} in ${r.filename} on line ${r.lineno}:${r.colno}`,
|
|
@@ -259,13 +259,14 @@ const S = (e) => {
|
|
|
259
259
|
});
|
|
260
260
|
};
|
|
261
261
|
export {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
262
|
+
L as Logger,
|
|
263
|
+
x as addCrashListener,
|
|
264
|
+
k as collectPhpLogs,
|
|
265
265
|
S as collectWindowErrors,
|
|
266
|
-
|
|
266
|
+
l as errorLogPath,
|
|
267
|
+
M as formatLogEntry,
|
|
267
268
|
E as logEventType,
|
|
268
|
-
|
|
269
|
+
T as logger,
|
|
269
270
|
c as prepareLogMessage,
|
|
270
271
|
C as reportServiceWorkerMetrics
|
|
271
272
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { UniversalPHP } from '
|
|
1
|
+
import type { UniversalPHP } from '../types';
|
|
2
2
|
import { Logger } from '../logger';
|
|
3
|
+
export declare const errorLogPath = "/wordpress/wp-content/debug.log";
|
|
3
4
|
/**
|
|
4
5
|
* Collect PHP logs from the error_log file and log them.
|
|
5
6
|
* @param UniversalPHP playground instance
|
package/lib/logger.d.ts
CHANGED
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface UniversalPHP {
|
|
2
|
+
/**
|
|
3
|
+
* Read the content of a file as text.
|
|
4
|
+
*
|
|
5
|
+
* @param path The path to the file
|
|
6
|
+
* @returns string The content of the file
|
|
7
|
+
*/
|
|
8
|
+
readFileAsText(path: string): Promise<string>;
|
|
9
|
+
/**
|
|
10
|
+
* Check if a file exists.
|
|
11
|
+
*
|
|
12
|
+
* @param path The path to the file
|
|
13
|
+
* @returns boolean Whether the file exists
|
|
14
|
+
*/
|
|
15
|
+
fileExists(path: string): Promise<boolean>;
|
|
16
|
+
addEventListener(event: string, listener: (event: PHPRequestErrorEvent) => void): void;
|
|
17
|
+
}
|
|
18
|
+
export interface PHPRequestErrorEvent {
|
|
19
|
+
type: 'request.error';
|
|
20
|
+
error: Error;
|
|
21
|
+
source?: 'request' | 'php-wasm';
|
|
22
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@php-wasm/logger",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.40",
|
|
4
4
|
"description": "A logger for PHP-wasm clients like Playground and WP-now.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"node": ">=18.18.0",
|
|
28
28
|
"npm": ">=8.11.0"
|
|
29
29
|
},
|
|
30
|
-
"gitHead": "
|
|
30
|
+
"gitHead": "f2cae683a18c3fe90148b712eeab8f2f714c6ec2",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@php-wasm/node-polyfills": "0.9.
|
|
32
|
+
"@php-wasm/node-polyfills": "0.9.40"
|
|
33
33
|
}
|
|
34
34
|
}
|