diff --git a/.eslintrc.json b/.eslintrc.json index c95f836c1d..cacc494696 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -28,7 +28,7 @@ "no-inner-declarations": 0, "no-use-before-define": "off", "react/prop-types": 0, - "no-console": 0, + "no-console": 1, "no-empty": 0, "no-async-promise-executor": 0, "no-constant-condition": 0, @@ -60,6 +60,12 @@ "files": "*.json", "parser": "jsonc-eslint-parser", "rules": {} + }, + { + "files": "*.spec.ts", + "rules": { + "no-console": 0 + } } ] } diff --git a/packages/nx-extensions/.eslintrc.json b/packages/nx-extensions/.eslintrc.json index bb683dfdbb..c25b9adaec 100644 --- a/packages/nx-extensions/.eslintrc.json +++ b/packages/nx-extensions/.eslintrc.json @@ -4,7 +4,9 @@ "overrides": [ { "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} + "rules": { + "no-console": 0 + } }, { "files": ["*.ts", "*.tsx"], diff --git a/packages/php-wasm/fs-journal/src/lib/fs-journal.ts b/packages/php-wasm/fs-journal/src/lib/fs-journal.ts index dddfc9bb67..e25477995e 100644 --- a/packages/php-wasm/fs-journal/src/lib/fs-journal.ts +++ b/packages/php-wasm/fs-journal/src/lib/fs-journal.ts @@ -5,6 +5,7 @@ import { } from '@php-wasm/universal'; import type { IsomorphicLocalPHP } from '@php-wasm/universal'; import { Semaphore, basename, joinPaths } from '@php-wasm/util'; +import { logger } from '@php-wasm/logger'; export type EmscriptenFS = any; @@ -401,7 +402,7 @@ export function normalizeFilesystemOperations( // // But that's not a straightforward transformation so let's just not handle // it for now. - console.warn( + logger.warn( '[FS Journal] Normalizing a double rename is not yet supported:', { current: latter, @@ -547,11 +548,11 @@ async function hydrateOp(php: UniversalPHP, op: UpdateFileOperation) { op.data = await php.readFileAsBuffer(op.path); } catch (e) { // Log the error but don't throw. - console.warn( + logger.warn( `Journal failed to hydrate a file on flush: the ` + `path ${op.path} no longer exists` ); - console.error(e); + logger.error(e); } release(); diff --git a/packages/php-wasm/logger/src/lib/collectors/collect-php-logs.ts b/packages/php-wasm/logger/src/lib/collectors/collect-php-logs.ts index 4747d3bfad..7a4b6d5aea 100644 --- a/packages/php-wasm/logger/src/lib/collectors/collect-php-logs.ts +++ b/packages/php-wasm/logger/src/lib/collectors/collect-php-logs.ts @@ -1,7 +1,4 @@ -import { - UniversalPHP, - PHPRequestErrorEvent, -} from '@php-wasm/universal/src/lib/universal-php'; +import { UniversalPHP, PHPRequestErrorEvent } from '../../universal'; import { Logger } from '../logger'; let lastPHPLogLength = 0; diff --git a/packages/php-wasm/logger/src/test/logger.spec.ts b/packages/php-wasm/logger/src/test/logger.spec.ts index 17e180e933..0b21de644c 100644 --- a/packages/php-wasm/logger/src/test/logger.spec.ts +++ b/packages/php-wasm/logger/src/test/logger.spec.ts @@ -1,29 +1,11 @@ -import { NodePHP } from '@php-wasm/node'; -import { LatestSupportedPHPVersion } from '@php-wasm/universal'; -import { Logger, addCrashListener } from '../lib/logger'; -import { collectPhpLogs } from '../lib/log-collector'; +import { Logger } from '../lib/logger'; import { clearMemoryLogs, logToMemory } from '../lib/log-handlers'; describe('Logger', () => { - let php: NodePHP; const logger = new Logger([logToMemory]); beforeEach(async () => { - php = await NodePHP.load(LatestSupportedPHPVersion); clearMemoryLogs(); }); - it('Event listener should work', () => { - const listener = vi.fn(); - collectPhpLogs(logger, php); - addCrashListener(logger, listener); - php.dispatchEvent({ - type: 'request.error', - error: new Error('test'), - }); - expect(listener).toBeCalledTimes(1); - - const logs = logger.getLogs(); - expect(logs.length).toBe(1); - }); it('Log message should be added', () => { logger.warn('test'); diff --git a/packages/php-wasm/logger/src/universal.d.ts b/packages/php-wasm/logger/src/universal.d.ts new file mode 100644 index 0000000000..f454787335 --- /dev/null +++ b/packages/php-wasm/logger/src/universal.d.ts @@ -0,0 +1,27 @@ +export interface UniversalPHP { + /** + * Read the content of a file as text. + * + * @param path The path to the file + * @returns string The content of the file + */ + readFileAsText(path: string): Promise; + /** + * Check if a file exists. + * + * @param path The path to the file + * @returns boolean Whether the file exists + */ + fileExists(path: string): Promise; + + addEventListener( + event: string, + listener: (event: PHPRequestEndEvent | PHPRequestErrorEvent) => void + ): void; +} + +export interface PHPRequestErrorEvent { + type: 'request.error'; + error: Error; + source?: 'request' | 'php-wasm'; +} diff --git a/packages/php-wasm/node/src/lib/networking/outbound-ws-to-tcp-proxy.ts b/packages/php-wasm/node/src/lib/networking/outbound-ws-to-tcp-proxy.ts index d35782fa37..4f7466b014 100644 --- a/packages/php-wasm/node/src/lib/networking/outbound-ws-to-tcp-proxy.ts +++ b/packages/php-wasm/node/src/lib/networking/outbound-ws-to-tcp-proxy.ts @@ -35,7 +35,7 @@ function prependByte( buffer.set(new Uint8Array(chunk), 1); chunk = buffer.buffer; } else { - console.log({ chunk }); + log({ chunk }); throw new Error('Unsupported chunk type: ' + typeof chunk); } return chunk; diff --git a/packages/php-wasm/node/src/lib/networking/utils.ts b/packages/php-wasm/node/src/lib/networking/utils.ts index 1bfd4c809d..a89c3ccb71 100644 --- a/packages/php-wasm/node/src/lib/networking/utils.ts +++ b/packages/php-wasm/node/src/lib/networking/utils.ts @@ -1,8 +1,9 @@ import * as net from 'net'; +import { logger } from '@php-wasm/logger'; -export function debugLog(...args: any[]) { +export function debugLog(message: any, ...args: any[]) { if (process.env['DEV'] && !process.env['TEST']) { - console.log(...args); + logger.log(message, ...args); } } diff --git a/packages/php-wasm/progress/src/lib/emscripten-download-monitor.ts b/packages/php-wasm/progress/src/lib/emscripten-download-monitor.ts index 5d499b40cd..4a57142d50 100644 --- a/packages/php-wasm/progress/src/lib/emscripten-download-monitor.ts +++ b/packages/php-wasm/progress/src/lib/emscripten-download-monitor.ts @@ -1,3 +1,4 @@ +import { logger } from '@php-wasm/logger'; /* * An approximate total file size to use when the actual * total number of bytes is missing. @@ -69,7 +70,7 @@ export class EmscriptenDownloadMonitor extends EventTarget { fileSize = this.#assetsSizes[fileName]; } if (!(fileName in this.#progress)) { - console.warn( + logger.warn( `Registered a download #progress of an unregistered file "${fileName}". ` + `This may cause a sudden **decrease** in the #progress percentage as the ` + `total number of bytes increases during the download.` @@ -156,7 +157,7 @@ export function cloneResponseMonitorProgress( controller.enqueue(value); } } catch (e) { - console.error({ e }); + logger.error({ e }); controller.error(e); break; } diff --git a/packages/php-wasm/universal/src/lib/base-php.ts b/packages/php-wasm/universal/src/lib/base-php.ts index 5c07f28f3c..05b0b57b78 100644 --- a/packages/php-wasm/universal/src/lib/base-php.ts +++ b/packages/php-wasm/universal/src/lib/base-php.ts @@ -27,6 +27,7 @@ import { UnhandledRejectionsTarget, } from './wasm-error-reporting'; import { Semaphore, createSpawnHandler, joinPaths } from '@php-wasm/util'; +import { logger } from '@php-wasm/logger'; const STRING = 'string'; const NUMBER = 'number'; @@ -292,14 +293,14 @@ export abstract class BasePHP implements IsomorphicLocalPHP { const response = await this.#handleRequest(); if (response.exitCode !== 0) { - console.warn(`PHP.run() output was:`, response.text); + logger.warn(`PHP.run() output was:`, response.text); const error = new PHPExecutionFailureError( `PHP.run() failed with exit code ${response.exitCode} and the following output: ` + response.errors, response, 'request' ) as PHPExecutionFailureError; - console.error(error); + logger.error(error); throw error; } return response; @@ -521,7 +522,7 @@ export abstract class BasePHP implements IsomorphicLocalPHP { #setRequestBody(body: string | Uint8Array) { let size, contentLength; if (typeof body === 'string') { - console.warn( + logger.warn( 'Passing a string as the request body is deprecated. Please use a Uint8Array instead. See ' + 'https://github.com/WordPress/wordpress-playground/issues/997 for more details' ); @@ -633,8 +634,8 @@ export abstract class BasePHP implements IsomorphicLocalPHP { // eslint-disable-next-line no-async-promise-executor exitCode = await new Promise((resolve, reject) => { errorListener = (e: ErrorEvent) => { - console.error(e); - console.error(e.error); + logger.error(e); + logger.error(e.error); const rethrown = new Error('Rethrown'); rethrown.cause = e.error; (rethrown as any).betterMessage = e.message; @@ -680,7 +681,7 @@ export abstract class BasePHP implements IsomorphicLocalPHP { ) as string; const rethrown = new Error(message); rethrown.cause = err; - console.error(rethrown); + logger.error(rethrown); throw rethrown; } finally { this.#wasmErrorsTarget?.removeEventListener('error', errorListener); @@ -785,7 +786,7 @@ export abstract class BasePHP implements IsomorphicLocalPHP { } return files; } catch (e) { - console.error(e, { path }); + logger.error(e, { path }); return []; } } diff --git a/packages/php-wasm/universal/src/lib/http-cookie-store.ts b/packages/php-wasm/universal/src/lib/http-cookie-store.ts index d3cb7c88f7..5e45a28ee8 100644 --- a/packages/php-wasm/universal/src/lib/http-cookie-store.ts +++ b/packages/php-wasm/universal/src/lib/http-cookie-store.ts @@ -1,3 +1,5 @@ +import { logger } from '@php-wasm/logger'; + /** * @public */ @@ -20,7 +22,7 @@ export class HttpCookieStore { .split(';')[0]; this.cookies[name] = value; } catch (e) { - console.error(e); + logger.error(e); } } } diff --git a/packages/php-wasm/universal/src/lib/load-php-runtime.ts b/packages/php-wasm/universal/src/lib/load-php-runtime.ts index ba6c966fee..8c9ed0eff9 100644 --- a/packages/php-wasm/universal/src/lib/load-php-runtime.ts +++ b/packages/php-wasm/universal/src/lib/load-php-runtime.ts @@ -1,3 +1,5 @@ +import { logger } from '@php-wasm/logger'; + const RuntimeId = Symbol('RuntimeId'); const loadedRuntimes: Map = new Map(); let lastRuntimeId = 0; @@ -130,7 +132,7 @@ export async function loadPHPRuntime( rejectPHP(reason); // This can happen after PHP has been initialized so // let's just log it. - console.error(reason); + logger.error(reason); }, ENV: {}, // Emscripten sometimes prepends a '/' to the path, which diff --git a/packages/php-wasm/universal/src/lib/php-request-handler.ts b/packages/php-wasm/universal/src/lib/php-request-handler.ts index 9012faf4db..73e2ebf980 100644 --- a/packages/php-wasm/universal/src/lib/php-request-handler.ts +++ b/packages/php-wasm/universal/src/lib/php-request-handler.ts @@ -14,6 +14,7 @@ import { PHPResponse } from './php-response'; import { PHPRequest, PHPRunOptions } from './universal-php'; import { encodeAsMultipart } from './encode-as-multipart'; import { HttpCookieStore } from './http-cookie-store'; +import { logger } from '@php-wasm/logger'; export type RewriteRule = { match: RegExp; @@ -311,7 +312,7 @@ export class PHPRequestHandler { this.#semaphore.running > 0 && request.headers?.['x-request-issuer'] === 'php' ) { - console.warn( + logger.warn( `Possible deadlock: Called request() before the previous request() have finished. ` + `PHP likely issued an HTTP call to itself. Normally this would lead to infinite ` + `waiting as Request 1 holds the lock that the Request 2 is waiting to acquire. ` + diff --git a/packages/php-wasm/universal/src/lib/wasm-error-reporting.ts b/packages/php-wasm/universal/src/lib/wasm-error-reporting.ts index 7eb6d7fe39..45b1c35a34 100644 --- a/packages/php-wasm/universal/src/lib/wasm-error-reporting.ts +++ b/packages/php-wasm/universal/src/lib/wasm-error-reporting.ts @@ -1,5 +1,6 @@ import { ErrorEvent } from './error-event-polyfill'; import { isExitCodeZero } from './is-exit-code-zero'; +import { logger } from '@php-wasm/logger'; type Runtime = { asm: Record; @@ -143,11 +144,11 @@ export function showCriticalErrorBox(message: string) { if (message?.trim().startsWith('Program terminated with exit')) { return; } - console.log(`${redBg}\n${eol}\n${bold} WASM ERROR${reset}${redBg}`); + logger.log(`${redBg}\n${eol}\n${bold} WASM ERROR${reset}${redBg}`); for (const line of message.split('\n')) { - console.log(`${eol} ${line} `); + logger.log(`${eol} ${line} `); } - console.log(`${reset}`); + logger.log(`${reset}`); } function extractPHPFunctionsFromStack(stack: string) { diff --git a/packages/php-wasm/web-service-worker/.eslintrc.json b/packages/php-wasm/web-service-worker/.eslintrc.json index 79fd7c1d98..9f6bc721bd 100644 --- a/packages/php-wasm/web-service-worker/.eslintrc.json +++ b/packages/php-wasm/web-service-worker/.eslintrc.json @@ -4,7 +4,9 @@ "overrides": [ { "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} + "rules": { + "no-console": 0 + } }, { "files": ["*.ts", "*.tsx"], diff --git a/packages/php-wasm/web/src/lib/api.ts b/packages/php-wasm/web/src/lib/api.ts index 836b270259..bb81c8528a 100644 --- a/packages/php-wasm/web/src/lib/api.ts +++ b/packages/php-wasm/web/src/lib/api.ts @@ -1,5 +1,6 @@ import { PHPResponse, PHPResponseData } from '@php-wasm/universal'; import * as Comlink from 'comlink'; +import { logger } from '@php-wasm/logger'; export type WithAPIState = { /** @@ -133,7 +134,7 @@ function setupTransferHandlers() { Comlink.transferHandlers.set('FUNCTION', { canHandle: (obj: unknown): obj is Function => typeof obj === 'function', serialize(obj: Function) { - console.debug('[Comlink][Performance] Proxying a function'); + logger.debug('[Comlink][Performance] Proxying a function'); const { port1, port2 } = new MessageChannel(); Comlink.expose(obj, port1); return [port2, [port2]]; diff --git a/packages/php-wasm/web/src/lib/register-service-worker.ts b/packages/php-wasm/web/src/lib/register-service-worker.ts index 2fa3cb0610..2055d53c15 100644 --- a/packages/php-wasm/web/src/lib/register-service-worker.ts +++ b/packages/php-wasm/web/src/lib/register-service-worker.ts @@ -2,6 +2,7 @@ import { PhpWasmError } from '@php-wasm/util'; import type { WebPHPEndpoint } from './web-php-endpoint'; import { responseTo } from '@php-wasm/web-service-worker'; import { Remote } from 'comlink'; +import { logger } from '@php-wasm/logger'; /** * Run this in the main application to register the service worker or @@ -33,7 +34,7 @@ export async function registerServiceWorker< } } - console.debug(`[window][sw] Registering a Service Worker`); + logger.debug(`[window][sw] Registering a Service Worker`); const registration = await sw.register(scriptUrl, { type: 'module', // Always bypass HTTP cache when fetching the new Service Worker script: diff --git a/packages/playground/blueprints/src/lib/compile.ts b/packages/playground/blueprints/src/lib/compile.ts index 4be2ea30c0..d5d0380340 100644 --- a/packages/playground/blueprints/src/lib/compile.ts +++ b/packages/playground/blueprints/src/lib/compile.ts @@ -14,6 +14,7 @@ import { FileReference, isFileReference, Resource } from './resources'; import { Step, StepDefinition } from './steps'; import * as allStepHandlers from './steps/handlers'; import { Blueprint } from './blueprint'; +import { logger } from '@php-wasm/logger'; // @TODO: Configure this in the `wp-cli` step, not here. const { wpCLI, ...otherStepHandlers } = allStepHandlers; @@ -93,7 +94,7 @@ export function compileBlueprint( for (const step of blueprint.steps!) { if (typeof step === 'object' && (step as any).step === 'importFile') { (step as any).step = 'importWxr'; - console.warn( + logger.warn( `The "importFile" step is deprecated. Use "importWxr" instead.` ); } @@ -175,7 +176,7 @@ export function compileBlueprint( blueprint.phpExtensionBundles.filter( (bundle) => bundle !== 'light' ); - console.warn( + logger.warn( `The wpCli step used in your Blueprint requires the iconv and mbstring PHP extensions. ` + `However, you did not specify the kitchen-sink extension bundle. Playground will override your ` + `choice and load the kitchen-sink PHP extensions bundle to prevent the WP-CLI step from failing. ` @@ -215,7 +216,7 @@ export function compileBlueprint( blueprint.phpExtensionBundles.filter( (bundle) => bundle !== 'light' ); - console.warn( + logger.warn( `The importWxr step used in your Blueprint requires the iconv and mbstring PHP extensions. ` + `However, you did not specify the kitchen-sink extension bundle. Playground will override your ` + `choice and load the kitchen-sink PHP extensions bundle to prevent the WP-CLI step from failing. ` @@ -290,7 +291,7 @@ export function compileBlueprint( const result = await run(playground); onStepCompleted(result, step); } catch (e) { - console.error(e); + logger.error(e); throw new Error( `Error when executing the blueprint step #${i} (${JSON.stringify( step @@ -427,7 +428,7 @@ function isStepStillSupported( step: Record ): step is StepDefinition { if (step['step'] === 'setPhpIniEntry') { - console.warn( + logger.warn( `The "setPhpIniEntry" Blueprint is no longer supported and you can remove it from your Blueprint.` ); return false; diff --git a/packages/playground/blueprints/src/lib/steps/enable-multisite.ts b/packages/playground/blueprints/src/lib/steps/enable-multisite.ts index 0cffd6398e..a728b98414 100644 --- a/packages/playground/blueprints/src/lib/steps/enable-multisite.ts +++ b/packages/playground/blueprints/src/lib/steps/enable-multisite.ts @@ -6,6 +6,7 @@ import { request } from './request'; import { setSiteOptions } from './site-data'; import { activatePlugin } from './activate-plugin'; import { getURLScope, isURLScoped } from '@php-wasm/scopes'; +import { logger } from '@php-wasm/logger'; /** * @inheritDoc enableMultisite @@ -136,7 +137,7 @@ echo json_encode($deactivated_plugins); }, }); if (response.httpStatusCode !== 200) { - console.warn('WordPress response was', { + logger.warn('WordPress response was', { response, text: response.text, headers: response.headers, diff --git a/packages/playground/blueprints/src/lib/steps/login.ts b/packages/playground/blueprints/src/lib/steps/login.ts index 77ac4eb6ee..31e7ee6dca 100644 --- a/packages/playground/blueprints/src/lib/steps/login.ts +++ b/packages/playground/blueprints/src/lib/steps/login.ts @@ -1,4 +1,5 @@ import { StepHandler } from '.'; +import { logger } from '@php-wasm/logger'; /** * @inheritDoc login @@ -52,7 +53,7 @@ export const login: StepHandler = async ( }); if (!response.headers?.['location']?.[0]?.includes('/wp-admin/')) { - console.warn('WordPress response was', { + logger.warn('WordPress response was', { response, text: response.text, }); diff --git a/packages/playground/blueprints/src/lib/steps/request.ts b/packages/playground/blueprints/src/lib/steps/request.ts index 5ecbbef283..3b408d3ed2 100644 --- a/packages/playground/blueprints/src/lib/steps/request.ts +++ b/packages/playground/blueprints/src/lib/steps/request.ts @@ -1,5 +1,6 @@ import { PHPRequest, PHPResponse } from '@php-wasm/universal'; import { StepHandler } from '.'; +import { logger } from '@php-wasm/logger'; /** * @inheritDoc request @@ -38,7 +39,7 @@ export const request: StepHandler> = async ( ) => { const response = await playground.request(request); if (response.httpStatusCode > 399 || response.httpStatusCode < 200) { - console.warn('WordPress response was', { response }); + logger.warn('WordPress response was', { response }); throw new Error( `Request failed with status ${response.httpStatusCode}` ); diff --git a/packages/playground/blueprints/src/lib/steps/unzip.ts b/packages/playground/blueprints/src/lib/steps/unzip.ts index 0858a2548f..e6baa7abde 100644 --- a/packages/playground/blueprints/src/lib/steps/unzip.ts +++ b/packages/playground/blueprints/src/lib/steps/unzip.ts @@ -1,6 +1,7 @@ import { phpVars } from '@php-wasm/util'; import { StepHandler } from '.'; import { runPhpWithZipFunctions } from '../utils/run-php-with-zip-functions'; +import { logger } from '@php-wasm/logger'; /** * @inheritDoc unzip @@ -50,7 +51,7 @@ export const unzip: StepHandler> = async ( tmpPath, await playground.readFileAsBuffer(zipPath) ); - console.warn( + logger.warn( `The "zipPath" option of the unzip() Blueprint step is deprecated and will be removed. ` + `Use "zipFile" instead.` ); diff --git a/packages/playground/client/src/index.ts b/packages/playground/client/src/index.ts index ddff9afbca..6f9d8517ad 100644 --- a/packages/playground/client/src/index.ts +++ b/packages/playground/client/src/index.ts @@ -214,7 +214,7 @@ export async function connectPlayground( iframe: HTMLIFrameElement, options?: { loadRemote?: string } ): Promise { - console.warn( + logger.warn( '`connectPlayground` is deprecated and will be removed. Use `startPlayground` instead.' ); if (options?.loadRemote) { diff --git a/packages/playground/remote/src/lib/opfs/bind-opfs.ts b/packages/playground/remote/src/lib/opfs/bind-opfs.ts index b1c72014b9..66ba9c5786 100644 --- a/packages/playground/remote/src/lib/opfs/bind-opfs.ts +++ b/packages/playground/remote/src/lib/opfs/bind-opfs.ts @@ -9,6 +9,7 @@ */ /* eslint-disable prefer-rest-params */ +import { logger } from '@php-wasm/logger'; import { __private__dont__use } from '@php-wasm/universal'; import { Semaphore, joinPaths } from '@php-wasm/util'; import type { WebPHP } from '@php-wasm/web'; @@ -105,7 +106,7 @@ export async function copyOpfsToMemfs( FS.mkdir(memfsEntryPath); } catch (e) { if ((e as any)?.errno !== 20) { - console.error(e); + logger.error(e); // We ignore the error if the directory already exists, // and throw otherwise. throw e; diff --git a/packages/playground/remote/src/lib/opfs/journal-memfs-to-opfs.ts b/packages/playground/remote/src/lib/opfs/journal-memfs-to-opfs.ts index a3aaee344c..58be98b0b0 100644 --- a/packages/playground/remote/src/lib/opfs/journal-memfs-to-opfs.ts +++ b/packages/playground/remote/src/lib/opfs/journal-memfs-to-opfs.ts @@ -9,6 +9,7 @@ */ /* eslint-disable prefer-rest-params */ +import { logger } from '@php-wasm/logger'; import type { WebPHP } from '@php-wasm/web'; import type { EmscriptenFS } from './types'; import { FilesystemOperation, journalFSEvents } from '@php-wasm/fs-journal'; @@ -136,8 +137,8 @@ class OpfsRewriter { } catch (e) { // Useful for debugging – the original error gets lost in the // Comlink proxy. - console.log({ entry, name }); - console.error(e); + logger.log({ entry, name }); + logger.error(e); throw e; } } diff --git a/packages/playground/remote/src/lib/setup-fetch-network-transport.ts b/packages/playground/remote/src/lib/setup-fetch-network-transport.ts index 03acdd9e7a..1ebd4dcadb 100644 --- a/packages/playground/remote/src/lib/setup-fetch-network-transport.ts +++ b/packages/playground/remote/src/lib/setup-fetch-network-transport.ts @@ -96,7 +96,6 @@ export async function handleRequest(data: RequestData, fetchFn = fetch) { credentials: 'omit', }); } catch (e) { - // console.error(e); return new TextEncoder().encode( `HTTP/1.1 400 Invalid Request\r\ncontent-type: text/plain\r\n\r\nPlayground could not serve the request.` ); diff --git a/packages/playground/remote/src/lib/worker-thread.ts b/packages/playground/remote/src/lib/worker-thread.ts index 81f7fbeb24..a409674009 100644 --- a/packages/playground/remote/src/lib/worker-thread.ts +++ b/packages/playground/remote/src/lib/worker-thread.ts @@ -1,6 +1,7 @@ import { WebPHP, WebPHPEndpoint, exposeAPI } from '@php-wasm/web'; import { EmscriptenDownloadMonitor } from '@php-wasm/progress'; import { setURLScope } from '@php-wasm/scopes'; +import { logger } from '@php-wasm/logger'; import { DOCROOT, wordPressSiteUrl } from './config'; import { getWordPressModuleDetails, @@ -464,7 +465,7 @@ try { processApi.stderr(result.errors); processApi.exit(result.exitCode); } catch (e) { - console.error('Error in childPHP:', e); + logger.error('Error in childPHP:', e); if (e instanceof Error) { processApi.stderr(e.message); } diff --git a/packages/playground/sync/src/middleware/logger.ts b/packages/playground/sync/src/middleware/logger.ts index 772daaf025..144574883c 100644 --- a/packages/playground/sync/src/middleware/logger.ts +++ b/packages/playground/sync/src/middleware/logger.ts @@ -1,15 +1,16 @@ import { SyncMiddleware } from '.'; +import { logger } from '@php-wasm/logger'; export function loggerMiddleware(clientId: string): SyncMiddleware { return { beforeSend: (envelope) => { if (envelope.sql.length > 0 || envelope.fs.length > 0) { - console.log(`[${clientId}] Sending changes`, envelope); + logger.log(`[${clientId}] Sending changes`, envelope); } return envelope; }, afterReceive: (envelope) => { - console.log(`[${clientId}] Received changes`, envelope); + logger.log(`[${clientId}] Received changes`, envelope); return envelope; }, }; diff --git a/packages/playground/sync/src/sql.ts b/packages/playground/sync/src/sql.ts index 680aec5c52..ddb24bc22a 100644 --- a/packages/playground/sync/src/sql.ts +++ b/packages/playground/sync/src/sql.ts @@ -1,4 +1,5 @@ import { PHPResponse, UniversalPHP } from '@php-wasm/universal'; +import { logger } from '@php-wasm/logger'; /** @ts-ignore */ import logSqlQueries from './sync-mu-plugin.php?raw'; import { phpVar, phpVars } from '@php-wasm/util'; @@ -119,7 +120,7 @@ export async function replaySQLJournal( function assertEmptyOutput(result: PHPResponse, errorMessage: string) { if (result.text.trim() || result.errors.trim()) { - console.error({ + logger.error({ text: result.text, errors: result.errors, }); diff --git a/packages/playground/website/src/components/error-report-modal/index.tsx b/packages/playground/website/src/components/error-report-modal/index.tsx index 6e4c986702..61d1877c17 100644 --- a/packages/playground/website/src/components/error-report-modal/index.tsx +++ b/packages/playground/website/src/components/error-report-modal/index.tsx @@ -29,7 +29,7 @@ export function ErrorReportModal(props: { blueprint: Blueprint }) { useEffect(() => { resetForm(); if (showErrorModal) { - setLogs(logger.getLogs().join('')); + setLogs(logger.getLogs().join('\n')); setUrl(window.location.href); } }, [showErrorModal, setShowErrorModal, logs, setLogs]); diff --git a/packages/playground/website/src/components/import-form/index.tsx b/packages/playground/website/src/components/import-form/index.tsx index 4d4ab8dc12..9fcd90abe5 100644 --- a/packages/playground/website/src/components/import-form/index.tsx +++ b/packages/playground/website/src/components/import-form/index.tsx @@ -5,6 +5,7 @@ import { PlaygroundClient, importWordPressFiles } from '@wp-playground/client'; import css from './style.module.css'; import forms from '../../forms.module.css'; import Button from '../button'; +import { logger } from '@php-wasm/logger'; interface ImportFormProps { playground: PlaygroundClient; @@ -34,7 +35,7 @@ export default function ImportForm({ try { await importWordPressFiles(playground, { wordPressFilesZip: file }); } catch (error) { - console.error(error); + logger.error(error); setError( 'Unable to import file. Is it a valid WordPress Playground export?' ); diff --git a/packages/playground/website/src/components/playground-configuration-group/index.tsx b/packages/playground/website/src/components/playground-configuration-group/index.tsx index c53651be6c..05aee694c9 100644 --- a/packages/playground/website/src/components/playground-configuration-group/index.tsx +++ b/packages/playground/website/src/components/playground-configuration-group/index.tsx @@ -15,6 +15,7 @@ import { import { OPFSButton } from './opfs-button'; import { usePlaygroundContext } from '../playground-viewport/context'; import { SyncLocalFilesButton } from './sync-local-files-button'; +import { logger } from '@php-wasm/logger'; interface SiteSetupGroupProps { initialConfiguration: PlaygroundConfiguration; @@ -120,7 +121,7 @@ export default function PlaygroundConfigurationGroup({ }); } catch (e) { // No directory selected but log the error just in case. - console.error(e); + logger.error(e); return; } setDirName(dirHandle.name); diff --git a/packages/playground/website/src/components/playground-configuration-group/reload-with-new-configuration.ts b/packages/playground/website/src/components/playground-configuration-group/reload-with-new-configuration.ts index 109209898e..8d9a41e7f9 100644 --- a/packages/playground/website/src/components/playground-configuration-group/reload-with-new-configuration.ts +++ b/packages/playground/website/src/components/playground-configuration-group/reload-with-new-configuration.ts @@ -1,5 +1,6 @@ import { PlaygroundClient } from '@wp-playground/client'; import { PlaygroundConfiguration } from './form'; +import { logger } from '@php-wasm/logger'; export async function reloadWithNewConfiguration( config: PlaygroundConfiguration, @@ -9,7 +10,7 @@ export async function reloadWithNewConfiguration( try { await playground?.resetVirtualOpfs(); } catch (error) { - console.error(error); + logger.error(error); } } diff --git a/packages/playground/website/src/github/github-import-form/form.tsx b/packages/playground/website/src/github/github-import-form/form.tsx index 45ec75bf6f..1d4cbd28e4 100644 --- a/packages/playground/website/src/github/github-import-form/form.tsx +++ b/packages/playground/website/src/github/github-import-form/form.tsx @@ -21,6 +21,7 @@ import { ContentType, importFromGitHub } from '../import-from-github'; import { Spinner } from '../../components/spinner'; import GitHubOAuthGuard from '../github-oauth-guard'; import { basename, normalizePath } from '@php-wasm/util'; +import { logger } from '@php-wasm/logger'; export interface GitHubImportFormProps { playground: PlaygroundClient; @@ -85,7 +86,7 @@ export default function GitHubImportForm({ url: 'This URL is not supported', }); } - console.log(info); + logger.log(info); setUrlInformation(info); const octokit = getClient(); setIsAnalyzing(true); @@ -100,7 +101,7 @@ export default function GitHubImportForm({ setContentType(await guessContentType(octokit, info)); return; } catch (e: any) { - console.error(e); + logger.error(e); // Handle the "Bad Credentials" error if (e && e.status) { switch (e.status) {