12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- * Copyright (C) 2024 Puter Technologies Inc.
- *
- * This file is part of Phoenix Shell.
- *
- * Phoenix Shell is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
- import { Context } from 'contextlink';
- import { launchPuterShell } from './puter-shell/main.js';
- import { NodeStdioPTT } from './pty/NodeStdioPTT.js';
- import { CreateFilesystemProvider } from './platform/node/filesystem.js';
- import { CreateEnvProvider } from './platform/node/env.js';
- import { parseArgs } from '@pkgjs/parseargs';
- import capcon from 'capture-console';
- import fs from 'fs';
- const { values } = parseArgs({
- options: {
- 'log': {
- type: 'string',
- }
- },
- args: process.argv.slice(2),
- });
- const logFile = await (async () => {
- if (!values.log)
- return;
- return await fs.promises.open(values.log, 'w');
- })();
- // Capture console.foo() output and either send it to the log file, or to nowhere.
- for (const [name, oldMethod] of Object.entries(console)) {
- console[name] = async (...args) => {
- let result;
- const stdio = capcon.interceptStdio(() => {
- result = oldMethod(...args);
- });
- if (logFile) {
- await logFile.write(stdio.stdout);
- await logFile.write(stdio.stderr);
- }
- return result;
- };
- }
- const ctx = new Context({
- ptt: new NodeStdioPTT(),
- config: {},
- platform: new Context({
- name: 'node',
- filesystem: CreateFilesystemProvider(),
- env: CreateEnvProvider(),
- }),
- });
- await launchPuterShell(ctx);
|