Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@
"@metamask/kernel-shims": "workspace:^",
"@metamask/kernel-utils": "workspace:^",
"@metamask/logger": "workspace:^",
"@metamask/snaps-utils": "^11.7.1",
"@metamask/utils": "^11.9.0",
"@types/node": "^22.13.1",
"acorn": "^8.15.0",
Expand Down
43 changes: 31 additions & 12 deletions packages/cli/src/app.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import '@metamask/kernel-shims/endoify';
import '@metamask/kernel-shims/endoify-node';
import { Logger } from '@metamask/logger';
import type { LogEntry } from '@metamask/logger';
import path from 'node:path';
import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
Expand All @@ -12,9 +13,24 @@ import type { Config } from './config.ts';
import { startRelay } from './relay.ts';
import { withTimeout } from './utils.ts';

const logger = new Logger('cli');
/**
* Console transport that omits tags from output.
*
* @param entry - The log entry to write.
*/
function consoleTransport(entry: LogEntry): void {
const args = [
...(entry.message ? [entry.message] : []),
...(entry.data ?? []),
];
// eslint-disable-next-line no-console
console[entry.level](...args);
}

await yargs(hideBin(process.argv))
const logger = new Logger({ tags: ['cli'], transports: [consoleTransport] });

const yargsInstance = yargs(hideBin(process.argv))
.scriptName('ocap')
.usage('$0 <command> [options]')
.demandCommand(1)
.strict()
Expand Down Expand Up @@ -63,7 +79,7 @@ await yargs(hideBin(process.argv))
dir: resolvedDir,
};
logger.info(`Starting ${appName} in ${resolvedDir} on ${url}`);
const server = getServer(config);
const server = getServer(config, logger);
await server.listen();
},
)
Expand Down Expand Up @@ -135,12 +151,15 @@ await yargs(hideBin(process.argv))
const closeWatcher = await watchReady;
closeHandlers.push(closeWatcher);

const server = getServer({
server: {
port: args.port,
const server = getServer(
{
server: {
port: args.port,
},
dir: resolvedDir,
},
dir: resolvedDir,
});
logger,
);
const { close: closeServer, port } = await server.listen();
closeHandlers.push(closeServer);

Expand All @@ -154,6 +173,6 @@ await yargs(hideBin(process.argv))
async () => {
await startRelay(logger);
},
)
.help('help')
.parse();
);

await yargsInstance.help('help').parse();
7 changes: 4 additions & 3 deletions packages/cli/src/commands/serve.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { logError } from '@metamask/snaps-utils/node';
import type { Logger } from '@metamask/logger';
import type { IncomingMessage, Server, ServerResponse } from 'node:http';
import { createServer } from 'node:http';
import type { AddressInfo } from 'node:net';
Expand All @@ -12,11 +12,12 @@ import type { Config } from '../config.ts';
* Get a static server for development purposes.
*
* @param config - The config object.
* @param logger - Optional logger for output.
* @returns An object with a `listen` method that returns a promise that
* resolves when the server is listening.
*/
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
export function getServer(config: Config) {
export function getServer(config: Config, logger?: Logger) {
if (!config.dir) {
throw new Error(`Config option 'dir' must be specified.`);
}
Expand Down Expand Up @@ -74,7 +75,7 @@ export function getServer(config: Config) {
getResponse(request, response).catch(
/* istanbul ignore next */
(error) => {
logError(error);
logger?.error(error);
response.statusCode = 500;
response.end();
},
Expand Down
1 change: 0 additions & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3375,7 +3375,6 @@ __metadata:
"@metamask/kernel-shims": "workspace:^"
"@metamask/kernel-utils": "workspace:^"
"@metamask/logger": "workspace:^"
"@metamask/snaps-utils": "npm:^11.7.1"
"@metamask/utils": "npm:^11.9.0"
"@ocap/repo-tools": "workspace:^"
"@ts-bridge/cli": "npm:^0.6.3"
Expand Down
Loading