Skip to content

Commit

Permalink
feat(node): add native module polyfills: url, crypto (#729)
Browse files Browse the repository at this point in the history
  • Loading branch information
kt3k committed Feb 16, 2021
1 parent b352905 commit 63b2a8d
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 7 deletions.
12 changes: 6 additions & 6 deletions node/README.md
Expand Up @@ -8,12 +8,12 @@ deno standard library as it's a compatibility module.

## Supported Builtins

- [ ] assert
- [x] assert _partly_
- [x] buffer
- [ ] child_process
- [ ] cluster
- [ ] console
- [ ] crypto
- [x] crypto _partly_
- [ ] dgram
- [ ] dns
- [x] events
Expand All @@ -30,15 +30,15 @@ deno standard library as it's a compatibility module.
- [x] querystring
- [ ] readline
- [ ] repl
- [ ] stream
- [ ] string_decoder
- [x] stream
- [x] string_decoder
- [ ] sys
- [x] timers
- [ ] tls
- [ ] tty
- [ ] url
- [x] url
- [x] util _partly_
- [ ] ~~v8~~ _can't implement_
- ~~v8~~ _can't implement_
- [ ] vm
- [ ] worker_threads
- [ ] zlib
Expand Down
6 changes: 5 additions & 1 deletion node/module.ts
Expand Up @@ -23,6 +23,7 @@ import "./global.ts";

import * as nodeAssert from "./assert.ts";
import * as nodeBuffer from "./buffer.ts";
import * as nodeCrypto from "./crypto.ts";
import nodeEvents from "./events.ts";
import * as nodeFS from "./fs.ts";
import * as nodeOs from "./os.ts";
Expand All @@ -31,6 +32,7 @@ import * as nodeQueryString from "./querystring.ts";
import * as nodeStream from "./stream.ts";
import * as nodeStringDecoder from "./string_decoder.ts";
import * as nodeTimers from "./timers.ts";
import * as nodeUrl from "./url.ts";
import * as nodeUtil from "./util.ts";

import * as path from "../path/mod.ts";
Expand Down Expand Up @@ -598,6 +600,7 @@ function createNativeModule(id: string, exports: any): Module {

nativeModulePolyfill.set("assert", createNativeModule("assert", nodeAssert));
nativeModulePolyfill.set("buffer", createNativeModule("buffer", nodeBuffer));
nativeModulePolyfill.set("crypto", createNativeModule("crypto", nodeCrypto));
nativeModulePolyfill.set("events", createNativeModule("events", nodeEvents));
nativeModulePolyfill.set("fs", createNativeModule("fs", nodeFS));
nativeModulePolyfill.set("os", createNativeModule("os", nodeOs));
Expand All @@ -608,13 +611,14 @@ nativeModulePolyfill.set(
);
nativeModulePolyfill.set(
"stream",
createNativeModule("string_decoder", nodeStream),
createNativeModule("stream", nodeStream),
);
nativeModulePolyfill.set(
"string_decoder",
createNativeModule("string_decoder", nodeStringDecoder),
);
nativeModulePolyfill.set("timers", createNativeModule("timers", nodeTimers));
nativeModulePolyfill.set("url", createNativeModule("url", nodeUrl));
nativeModulePolyfill.set("util", createNativeModule("util", nodeUtil));

function loadNativeModule(
Expand Down
37 changes: 37 additions & 0 deletions node/module_test.ts
Expand Up @@ -76,3 +76,40 @@ Deno.test("requireFileInSymlinkDir", () => {
const { C } = require("./_module/cjs/dir");
assertEquals(C, "C");
});

Deno.test("requireNodeJsNativeModules", () => {
// Checks these exist and don't throw.
require("assert");
require("buffer");
require("crypto");
require("events");
require("fs");
require("os");
require("path");
require("querystring");
require("stream");
require("string_decoder");
require("timers");
require("url");
require("util");

// TODO(kt3k): add these modules when implemented
// require("child_process");
// require("cluster");
// require("console");
// require("dgram");
// require("dns");
// require("http");
// require("http2");
// require("https");
// require("net");
// require("perf_hooks");
// require("readline");
// require("repl");
// require("sys");
// require("tls");
// require("tty");
// require("vm");
// require("worker_threads");
// require("zlib");
});

0 comments on commit 63b2a8d

Please sign in to comment.