Skip to content

Commit 5bbbb83

Browse files
committed
idea
1 parent cc1071d commit 5bbbb83

17 files changed

+1054
-0
lines changed

package-lock.json

+874
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"name": "process",
3+
"type": "commonjs",
4+
"version": "1.0.0",
5+
"description": "💻 Node.js process polyfill for browsers",
6+
"main": "index.js",
7+
"scripts": {
8+
"test": "echo \"Error: no test specified\" && exit 1"
9+
},
10+
"keywords": [],
11+
"author": "",
12+
"license": "ISC",
13+
"devDependencies": {
14+
"@types/node": "^20.4.2",
15+
"typescript": "^5.1.6",
16+
"vite": "^4.4.4",
17+
"vite-plugin-commonjs": "^0.8.1"
18+
},
19+
"dependencies": {
20+
"@nodefill/url": "^0.1.0"
21+
}
22+
}

src/argv-browser.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
2+
// or whatever best-guess is for the current browser/platform
3+
const bin = "/browser";
4+
const path = fileURLToPath("file://" + location.pathname);
5+
const argv = [bin, path];
6+
if (!location.search.includes("=")) {
7+
argv.push(location.search.slice(1));
8+
}
9+
10+
export = argv;

src/argv-node.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export = process.argv;

src/cwd-browser.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export = function cwd() {
2+
return fileURLToPath("file://" + location.pathname);
3+
};

src/cwd-node.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export = process.cwd;

src/exit-browser.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import exitCode from "./exitCode-browser.js";
2+
3+
export = function exit(code: number): never {
4+
document.documentElement?.remove();
5+
document.doctype?.remove();
6+
close();
7+
stop();
8+
if (code ?? exitCode.get()) {
9+
reportError(new DOMException(`Exit code ${code}`, "AbortError"));
10+
}
11+
throw undefined;
12+
};

src/exit-node.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export = process.exit;

src/exitCode-browser.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
let exitCodeValue = 0;
2+
export = {
3+
get: () => exitCodeValue,
4+
set: (exitCode: number) => void (exitCodeValue = exitCode),
5+
};

src/exitCode-node.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export = Object.getOwnPropertyDescriptor(process, "exitCode") as {
2+
get(): number;
3+
set(exitCode: number): void;
4+
};

src/index-browser.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import argv from "./argv-browser.js";
2+
import cwd from "./cwd-browser.js";
3+
import exit from "./exit-browser.js";
4+
import exitCode from "./exitCode-browser.js";
5+
6+
export { argv, cwd, exit, exitCode };

src/index-node.ts

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import * as process from "node:process";
2+
3+
exports._debugEnd =
4+
exports._debugProcess =
5+
exports._events =
6+
exports._eventsCount =
7+
exports._exiting =
8+
exports._fatalException =
9+
exports._getActiveHandles =
10+
exports._getActiveRequests =
11+
exports._kill =
12+
exports._linkedBinding =
13+
exports._maxListeners =
14+
exports._preload_modules =
15+
exports._rawDebug =
16+
exports._startProfilerIdleNotifier =
17+
exports._stopProfilerIdleNotifier =
18+
exports._tickCallback =
19+
exports.abort =
20+
exports.allowedNodeEnvironmentFlags =
21+
exports.arch =
22+
exports.argv =
23+
exports.argv0 =
24+
exports.assert =
25+
exports.binding =
26+
exports.chdir =
27+
exports.config =
28+
exports.constrainedMemory =
29+
exports.cpuUsage =
30+
exports.cwd =
31+
exports.debugPort =
32+
exports.dlopen =
33+
exports.domain =
34+
exports.emitWarning =
35+
exports.env =
36+
exports.execArgv =
37+
exports.execPath =
38+
exports.exit =
39+
exports.exitCode =
40+
exports.features =
41+
exports.getActiveResourcesInfo =
42+
exports.getegid =
43+
exports.geteuid =
44+
exports.getgid =
45+
exports.getgroups =
46+
exports.getuid =
47+
exports.hasUncaughtExceptionCaptureCallback =
48+
exports.hrtime =
49+
exports.initgroups =
50+
exports.kill =
51+
exports.memoryUsage =
52+
exports.moduleLoadList =
53+
exports.nextTick =
54+
exports.openStdin =
55+
exports.pid =
56+
exports.platform =
57+
exports.ppid =
58+
exports.reallyExit =
59+
exports.release =
60+
exports.report =
61+
exports.resourceUsage =
62+
exports.setSourceMapsEnabled =
63+
exports.setUncaughtExceptionCaptureCallback =
64+
exports.setegid =
65+
exports.seteuid =
66+
exports.setgid =
67+
exports.setgroups =
68+
exports.setuid =
69+
exports.stderr =
70+
exports.stdin =
71+
exports.stdout =
72+
exports.title =
73+
exports.umask =
74+
exports.uptime =
75+
exports.version =
76+
exports.versions =
77+
void 0;
78+
export = process;

src/polyfill-browser.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as process_ from "./index-browser.js";
2+
3+
declare global {
4+
var process: typeof process_;
5+
}
6+
7+
globalThis.process = process_;

src/polyfill-node.ts

Whitespace-only changes.

test/exit-browser.test.html

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<script type="module">
2+
import exit from "../src/exit-browser.ts";
3+
4+
exitbutton.onclick = () => {
5+
exit();
6+
};
7+
</script>
8+
<button id="exitbutton">Click to trigger <code>exit()</code></button>

tsconfig.json

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"compilerOptions": {
3+
"outDir": "dist",
4+
"declaration": true,
5+
"target": "ESNext",
6+
"module": "NodeNext",
7+
"moduleResolution": "NodeNext",
8+
"isolatedModules": true,
9+
"strict": true
10+
},
11+
"include": ["src"]
12+
}

vite.config.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { defineConfig } from "vite";
2+
import commonjs from "vite-plugin-commonjs";
3+
4+
// https://vitejs.dev/config/
5+
export default defineConfig({
6+
build: {
7+
target: "esnext",
8+
},
9+
plugins: [commonjs()],
10+
});

0 commit comments

Comments
 (0)