const { file } = import.meta; import { describe, it, expect } from "bun:test"; import * as path from "node:path"; import assert from "assert"; const strictEqual = (...args) => { assert.strictEqual(...args); expect(true).toBe(true); }; it("path.basename", () => { strictEqual(path.basename(file), "path.test.js"); strictEqual(path.basename(file, ".js"), "path.test"); strictEqual(path.basename(".js", ".js"), ""); strictEqual(path.basename(""), ""); strictEqual(path.basename("/dir/basename.ext"), "basename.ext"); strictEqual(path.basename("/basename.ext"), "basename.ext"); strictEqual(path.basename("basename.ext"), "basename.ext"); strictEqual(path.basename("basename.ext/"), "basename.ext"); strictEqual(path.basename("basename.ext//"), "basename.ext"); strictEqual(path.basename("aaa/bbb", "/bbb"), "bbb"); strictEqual(path.basename("aaa/bbb", "a/bbb"), "bbb"); strictEqual(path.basename("aaa/bbb", "bbb"), "bbb"); strictEqual(path.basename("aaa/bbb//", "bbb"), "bbb"); strictEqual(path.basename("aaa/bbb", "bb"), "b"); strictEqual(path.basename("aaa/bbb", "b"), "bb"); strictEqual(path.basename("/aaa/bbb", "/bbb"), "bbb"); strictEqual(path.basename("/aaa/bbb", "a/bbb"), "bbb"); strictEqual(path.basename("/aaa/bbb", "bbb"), "bbb"); strictEqual(path.basename("/aaa/bbb//", "bbb"), "bbb"); strictEqual(path.basename("/aaa/bbb", "bb"), "b"); strictEqual(path.basename("/aaa/bbb", "b"), "bb"); strictEqual(path.basename("/aaa/bbb"), "bbb"); strictEqual(path.basename("/aaa/"), "aaa"); strictEqual(path.basename("/aaa/b"), "b"); strictEqual(path.basename("/a/b"), "b"); strictEqual(path.basename("//a"), "a"); strictEqual(path.basename("a", "a"), ""); // // On Windows a backslash acts as a path separator. strictEqual(path.win32.basename("\\dir\\basename.ext"), "basename.ext"); strictEqual(path.win32.basename("\\basename.ext"), "basename.ext"); strictEqual(path.win32.basename("basename.ext"), "basename.ext"); strictEqual(path.win32.basename("basename.ext\\"), "basename.ext"); strictEqual(path.win32.basename("basename.ext\\\\"), "basename.ext"); strictEqual(path.win32.basename("foo"), "foo"); strictEqual(path.win32.basename("aaa\\bbb", "\\bbb"), "bbb"); strictEqual(path.win32.basename("aaa\\bbb", "a\\bbb"), "bbb"); strictEqual(path.win32.basename("aaa\\bbb", "bbb"), "bbb"); strictEqual(path.win32.basename("aaa\\bbb\\\\\\\\", "bbb"), "bbb"); strictEqual(path.win32.basename("aaa\\bbb", "bb"), "b"); strictEqual(path.win32.basename("aaa\\bbb", "b"), "bb"); strictEqual(path.win32.basename("C:"), ""); strictEqual(path.win32.basename("C:."), "."); strictEqual(path.win32.basename("C:\\"), ""); strictEqual(path.win32.basename("C:\\dir\\base.ext"), "base.ext"); strictEqual(path.win32.basename("C:\\basename.ext"), "basename.ext"); strictEqual(path.win32.basename("C:basename.ext"), "basename.ext"); strictEqual(path.win32.basename("C:basename.ext\\"), "basename.ext"); strictEqual(path.win32.basename("C:basename.ext\\\\"), "basename.ext"); strictEqual(path.win32.basename("C:foo"), "foo"); strictEqual(path.win32.basename("file:stream"), "file:stream"); strictEqual(path.win32.basename("a", "a"), ""); // On unix a backslash is just treated as any other character. strictEqual( path.posix.basename("\\dir\\basename.ext"), "\\dir\\basename.ext", ); strictEqual(path.posix.basename("\\basename.ext"), "\\basename.ext"); strictEqual(path.posix.basename("basename.ext"), "basename.ext"); strictEqual(path.posix.basename("basename.ext\\"), "basename.ext\\"); strictEqual(path.posix.basename("basename.ext\\\\"), "basename.ext\\\\"); strictEqual(path.posix.basename("foo"), "foo"); // POSIX filenames may include control characters // c.f. http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html const controlCharFilename = `Icon${String.fromCharCode(13)}`; strictEqual( path.posix.basename(`/a/b/${controlCharFilename}`), controlCharFilename, ); }); it("path.join", () => { const failures = []; const backslashRE = /\\/g; const joinTests = [ [ [path.posix.join], // Arguments result [ [[".", "x/b", "..", "/b/c.js"], "x/b/c.js"], // [[], '.'], [["/.", "x/b", "..", "/b/c.js"], "/x/b/c.js"], [["/foo", "../../../bar"], "/bar"], [["foo", "../../../bar"], "../../bar"], [["foo/", "../../../bar"], "../../bar"], [["foo/x", "../../../bar"], "../bar"], [["foo/x", "./bar"], "foo/x/bar"], [["foo/x/", "./bar"], "foo/x/bar"], [["foo/x/", ".", "bar"], "foo/x/bar"], [["./"], "./"], [[".", "./"], "./"], [[".", ".", "."], "."], [[".", "./", "."], "."], [[".", "/./", "."], "."], [[".", "/////./", "."], "."], [["."], "."], [["", "."], "."], [["", "foo"], "foo"], [["foo", "/bar"], "foo/bar"], [["", "/foo"], "/foo"], [["", "", "/foo"], "/foo"], [["", "", "foo"], "foo"], [["foo", ""], "foo"], [["foo/", ""], "foo/"], [["foo", "", "/bar"], "foo/bar"], [["./", "..", "/foo"], "../foo"], [["./", "..", "..", "/foo"], "../../foo"], [[".", "..", "..", "/foo"], "../../foo"], [["", "..", "..", "/foo"], "../../foo"], [["/"], "/"], [["/", "."], "/"], [["/", ".."], "/"], [["/", "..", ".."], "/"], [[""], "."], [["", ""], "."], [[" /foo"], " /foo"], [[" ", "foo"], " /foo"], [[" ", "."], " "], [[" ", "/"], " /"], [[" ", ""], " "], [["/", "foo"], "/foo"], [["/", "/foo"], "/foo"], [["/", "//foo"], "/foo"], [["/", "", "/foo"], "/foo"], [["", "/", "foo"], "/foo"], [["", "/", "/foo"], "/foo"], ], ], ]; // // Windows-specific join tests // joinTests.push([ // path.win32.join, // joinTests[0][1].slice(0).concat([ // // Arguments result // // UNC path expected // [["//foo/bar"], "\\\\foo\\bar\\"], // [["\\/foo/bar"], "\\\\foo\\bar\\"], // [["\\\\foo/bar"], "\\\\foo\\bar\\"], // // UNC path expected - server and share separate // [["//foo", "bar"], "\\\\foo\\bar\\"], // [["//foo/", "bar"], "\\\\foo\\bar\\"], // [["//foo", "/bar"], "\\\\foo\\bar\\"], // // UNC path expected - questionable // [["//foo", "", "bar"], "\\\\foo\\bar\\"], // [["//foo/", "", "bar"], "\\\\foo\\bar\\"], // [["//foo/", "", "/bar"], "\\\\foo\\bar\\"], // // UNC path expected - even more questionable // [["", "//foo", "bar"], "\\\\foo\\bar\\"], // [["", "//foo/", "bar"], "\\\\foo\\bar\\"], // [["", "//foo/", "/bar"], "\\\\foo\\bar\\"], // // No UNC path expected (no double slash in first component) // [["\\", "foo/bar"], "\\foo\\bar"], // [["\\", "/foo/bar"], "\\foo\\bar"], // [["", "/", "/foo/bar"], "\\foo\\bar"], // // No UNC path expected (no non-slashes in first component - // // questionable) // [["//", "foo/bar"], "\\foo\\bar"], // [["//", "/foo/bar"], "\\foo\\bar"], // [["\\\\", "/", "/foo/bar"], "\\foo\\bar"], // [["//"], "\\"], // // No UNC path expected (share name missing - questionable). // [["//foo"], "\\foo"], // [["//foo/"], "\\foo\\"], // [["//foo", "/"], "\\foo\\"], // [["//foo", "", "/"], "\\foo\\"], // // No UNC path expected (too many leading slashes - questionable) // [["///foo/bar"], "\\foo\\bar"], // [["////foo", "bar"], "\\foo\\bar"], // [["\\\\\\/foo/bar"], "\\foo\\bar"], // // Drive-relative vs drive-absolute paths. This merely describes the // // status quo, rather than being obviously right // [["c:"], "c:."], // [["c:."], "c:."], // [["c:", ""], "c:."], // [["", "c:"], "c:."], // [["c:.", "/"], "c:.\\"], // [["c:.", "file"], "c:file"], // [["c:", "/"], "c:\\"], // [["c:", "file"], "c:\\file"], // ]), // ]); joinTests.forEach((test) => { if (!Array.isArray(test[0])) test[0] = [test[0]]; test[0].forEach((join) => { test[1].forEach((test) => { const actual = join.apply(null, test[0]); const expected = test[1]; // For non-Windows specific tests with the Windows join(), we need to try // replacing the slashes since the non-Windows specific tests' `expected` // use forward slashes let actualAlt; let os; if (join === path.win32.join) { actualAlt = actual.replace(backslashRE, "/"); os = "win32"; } else { os = "posix"; } if (actual !== expected && actualAlt !== expected) { const delimiter = test[0].map(JSON.stringify).join(","); const message = `path.${os}.join(${delimiter})\n expect=${JSON.stringify( expected, )}\n actual=${JSON.stringify(actual)}`; failures.push(`\n${message}`); } }); }); }); strictEqual(failures.length, 0, failures.join("")); }); it("path.relative", () => { const failures = []; const relativeTests = [ // [ // path.win32.relative, // // Arguments result // [ // ["c:/blah\\blah", "d:/games", "d:\\games"], // ["c:/aaaa/bbbb", "c:/aaaa", ".."], // ["c:/aaaa/bbbb", "c:/cccc", "..\\..\\cccc"], // ["c:/aaaa/bbbb", "c:/aaaa/bbbb", ""], // ["c:/aaaa/bbbb", "c:/aaaa/cccc", "..\\cccc"], // ["c:/aaaa/", "c:/aaaa/cccc", "cccc"], // ["c:/", "c:\\aaaa\\bbbb", "aaaa\\bbbb"], // ["c:/aaaa/bbbb", "d:\\", "d:\\"], // ["c:/AaAa/bbbb", "c:/aaaa/bbbb", ""], // ["c:/aaaaa/", "c:/aaaa/cccc", "..\\aaaa\\cccc"], // ["C:\\foo\\bar\\baz\\quux", "C:\\", "..\\..\\..\\.."], // [ // "C:\\foo\\test", // "C:\\foo\\test\\bar\\package.json", // "bar\\package.json", // ], // ["C:\\foo\\bar\\baz-quux", "C:\\foo\\bar\\baz", "..\\baz"], // ["C:\\foo\\bar\\baz", "C:\\foo\\bar\\baz-quux", "..\\baz-quux"], // ["\\\\foo\\bar", "\\\\foo\\bar\\baz", "baz"], // ["\\\\foo\\bar\\baz", "\\\\foo\\bar", ".."], // ["\\\\foo\\bar\\baz-quux", "\\\\foo\\bar\\baz", "..\\baz"], // ["\\\\foo\\bar\\baz", "\\\\foo\\bar\\baz-quux", "..\\baz-quux"], // ["C:\\baz-quux", "C:\\baz", "..\\baz"], // ["C:\\baz", "C:\\baz-quux", "..\\baz-quux"], // ["\\\\foo\\baz-quux", "\\\\foo\\baz", "..\\baz"], // ["\\\\foo\\baz", "\\\\foo\\baz-quux", "..\\baz-quux"], // ["C:\\baz", "\\\\foo\\bar\\baz", "\\\\foo\\bar\\baz"], // ["\\\\foo\\bar\\baz", "C:\\baz", "C:\\baz"], // ], // ], [ path.posix.relative, // Arguments result [ ["/var/lib", "/var", ".."], ["/var/lib", "/bin", "../../bin"], ["/var/lib", "/var/lib", ""], ["/var/lib", "/var/apache", "../apache"], ["/var/", "/var/lib", "lib"], ["/", "/var/lib", "var/lib"], ["/foo/test", "/foo/test/bar/package.json", "bar/package.json"], ["/Users/a/web/b/test/mails", "/Users/a/web/b", "../.."], ["/foo/bar/baz-quux", "/foo/bar/baz", "../baz"], ["/foo/bar/baz", "/foo/bar/baz-quux", "../baz-quux"], ["/baz-quux", "/baz", "../baz"], ["/baz", "/baz-quux", "../baz-quux"], ["/page1/page2/foo", "/", "../../.."], ], ], ]; relativeTests.forEach((test) => { const relative = test[0]; test[1].forEach((test) => { const actual = relative(test[0], test[1]); const expected = test[2]; if (actual !== expected) { const os = relative === path.win32.relative ? "win32" : "posix"; const message = `path.${os}.relative(${test .slice(0, 2) .map(JSON.stringify) .join(",")})\n expect=${JSON.stringify( expected, )}\n actual=${JSON.stringify(actual)}`; failures.push(`\n${message}`); } }); }); strictEqual(failures.length, 0, failures.join("")); expect(true).toBe(true); }); it("path.normalize", () => { // strictEqual( // path.win32.normalize("./fixtures///b/../b/c.js"), // "fixtures\\b\\c.js" // ); // strictEqual(path.win32.normalize("/foo/../../../bar"), "\\bar"); // strictEqual(path.win32.normalize("a//b//../b"), "a\\b"); // strictEqual(path.win32.normalize("a//b//./c"), "a\\b\\c"); // strictEqual(path.win32.normalize("a//b//."), "a\\b"); // strictEqual( // path.win32.normalize("//server/share/dir/file.ext"), // "\\\\server\\share\\dir\\file.ext" // ); // strictEqual(path.win32.normalize("/a/b/c/../../../x/y/z"), "\\x\\y\\z"); // strictEqual(path.win32.normalize("C:"), "C:."); // strictEqual(path.win32.normalize("C:..\\abc"), "C:..\\abc"); // strictEqual(path.win32.normalize("C:..\\..\\abc\\..\\def"), "C:..\\..\\def"); // strictEqual(path.win32.normalize("C:\\."), "C:\\"); // strictEqual(path.win32.normalize("file:stream"), "file:stream"); // strictEqual(path.win32.normalize("bar\\foo..\\..\\"), "bar\\"); // strictEqual(path.win32.normalize("bar\\foo..\\.."), "bar"); // strictEqual(path.win32.normalize("bar\\foo..\\..\\baz"), "bar\\baz"); // strictEqual(path.win32.normalize("bar\\foo..\\"), "bar\\foo..\\"); // strictEqual(path.win32.normalize("bar\\foo.."), "bar\\foo.."); // strictEqual(path.win32.normalize("..\\foo..\\..\\..\\bar"), "..\\..\\bar"); // strictEqual( // path.win32.normalize("..\\...\\..\\.\\...\\..\\..\\bar"), // "..\\..\\bar" // ); // strictEqual( // path.win32.normalize("../../../foo/../../../bar"), // "..\\..\\..\\..\\..\\bar" // ); // strictEqual( // path.win32.normalize("../../../foo/../../../bar/../../"), // "..\\..\\..\\..\\..\\..\\" // ); // strictEqual( // path.win32.normalize("../foobar/barfoo/foo/../../../bar/../../"), // "..\\..\\" // ); // strictEqual( // path.win32.normalize("../.../../foobar/../../../bar/../../baz"), // "..\\..\\..\\..\\baz" // ); // strictEqual(path.win32.normalize("foo/bar\\baz"), "foo\\bar\\baz"); strictEqual( path.posix.normalize("./fixtures///b/../b/c.js"), "fixtures/b/c.js", ); strictEqual(path.posix.normalize("/foo/../../../bar"), "/bar"); strictEqual(path.posix.normalize("a//b//../b"), "a/b"); strictEqual(path.posix.normalize("a//b//./c"), "a/b/c"); strictEqual(path.posix.normalize("a//b//."), "a/b"); strictEqual(path.posix.normalize("/a/b/c/../../../x/y/z"), "/x/y/z"); strictEqual(path.posix.normalize("///..//./foo/.//bar"), "/foo/bar"); strictEqual(path.posix.normalize("bar/foo../../"), "bar/"); strictEqual(path.posix.normalize("bar/foo../.."), "bar"); strictEqual(path.posix.normalize("bar/foo../../baz"), "bar/baz"); strictEqual(path.posix.normalize("bar/foo../"), "bar/foo../"); strictEqual(path.posix.normalize("bar/foo.."), "bar/foo.."); strictEqual(path.posix.normalize("../foo../../../bar"), "../../bar"); strictEqual(path.posix.normalize("../.../.././.../../../bar"), "../../bar"); strictEqual( path.posix.normalize("../../../foo/../../../bar"), "../../../../../bar", ); strictEqual( path.posix.normalize("../../../foo/../../../bar/../../"), "../../../../../../", ); strictEqual( path.posix.normalize("../foobar/barfoo/foo/../../../bar/../../"), "../../", ); strictEqual( path.posix.normalize("../.../../foobar/../../../bar/../../baz"), "../../../../baz", ); strictEqual(path.posix.normalize("foo/bar\\baz"), "foo/bar\\baz"); }); it("path.resolve", () => { const failures = []; const slashRE = /\//g; const backslashRE = /\\/g; const resolveTests = [ // [ // path.win32.resolve, // // Arguments result // [ // [["c:/blah\\blah", "d:/games", "c:../a"], "c:\\blah\\a"], // [["c:/ignore", "d:\\a/b\\c/d", "\\e.exe"], "d:\\e.exe"], // [["c:/ignore", "c:/some/file"], "c:\\some\\file"], // [["d:/ignore", "d:some/dir//"], "d:\\ignore\\some\\dir"], // [["."], process.cwd()], // [["//server/share", "..", "relative\\"], "\\\\server\\share\\relative"], // [["c:/", "//"], "c:\\"], // [["c:/", "//dir"], "c:\\dir"], // [["c:/", "//server/share"], "\\\\server\\share\\"], // [["c:/", "//server//share"], "\\\\server\\share\\"], // [["c:/", "///some//dir"], "c:\\some\\dir"], // [ // ["C:\\foo\\tmp.3\\", "..\\tmp.3\\cycles\\root.js"], // "C:\\foo\\tmp.3\\cycles\\root.js", // ], // ], // ], [ path.posix.resolve, // Arguments result [ [["/var/lib", "../", "file/"], "/var/file"], [["/var/lib", "/../", "file/"], "/file"], [["a/b/c/", "../../.."], process.cwd()], [["."], process.cwd()], [["/some/dir", ".", "/absolute/"], "/absolute"], [ ["/foo/tmp.3/", "../tmp.3/cycles/root.js"], "/foo/tmp.3/cycles/root.js", ], ], ], ]; const isWindows = false; resolveTests.forEach(([resolve, tests]) => { tests.forEach(([test, expected]) => { const actual = resolve.apply(null, test); let actualAlt; const os = resolve === path.win32.resolve ? "win32" : "posix"; if (resolve === path.win32.resolve && !isWindows) actualAlt = actual.replace(backslashRE, "/"); else if (resolve !== path.win32.resolve && isWindows) actualAlt = actual.replace(slashRE, "\\"); const message = `path.${os}.resolve(${test .map(JSON.stringify) .join(",")})\n expect=${JSON.stringify( expected, )}\n actual=${JSON.stringify(actual)}`; if (actual !== expected && actualAlt !== expected) failures.push(message); }); }); strictEqual(failures.length, 0, failures.join("\n")); }); span title='2022-08-28 00:39:08 -0700'>2022-08-28[bun:ffi] Fix crash with uint64_tGravatar Jarred Sumner 3-9/+8 2022-08-28[bun:ffi] Fix int16 / uin16 maxGravatar Jarred Sumner 1-3/+6 2022-08-27Update WebKit (#1165)Gravatar Jarred Sumner 67-1083/+1210 * Update WebKit * Fix `DataView` and non-8 bit sized typed arrays with TextDecoder * New WebKit Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-08-27Fix crash in `os` module on macOSGravatar Jarred Sumner 2-74/+108 2022-08-27Update MakefileGravatar Jarred Sumner 1-1/+1 2022-08-27Update MakefileGravatar Jarred Sumner 1-0/+2 2022-08-27Fix ffi uint64_t parameter (#1158)Gravatar Zilin Zhu 4-39/+63 2022-08-27fix compile error (#1157)Gravatar Zilin Zhu 3-5/+7 2022-08-27added shell to STRIP variable definition (#1156)Gravatar Dylan Conway 1-1/+1 2022-08-26Update napi.zigGravatar Jarred Sumner 1-1/+3 2022-08-26Remove pointer to stack buffer in `os` module and fix build issueGravatar Jarred Sumner 3-23/+19 We cannot have pointers to stack memory returned in the same scope because that memory is no longer valid at the end of the scope cc @xHyroM 2022-08-26Implement `napi_add_finalizer`Gravatar Jarred Sumner 1-0/+13 2022-08-26Fix debug build cacheGravatar Jarred Sumner 1-1/+4 2022-08-26fix: Update broken README links (#1148)Gravatar Max Thomson 1-3/+3 2022-08-26Update node_fs.zigGravatar Jarred Sumner 1-1/+1 2022-08-26fix mkdtemp (#1151)Gravatar Zilin Zhu 1-3/+3 * fix mkdtemp * Update src/bun.js/node/node_fs.zig * Update src/bun.js/node/node_fs.zig Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> 2022-08-25Add native BufferList (#1146)Gravatar Zilin Zhu 8-167/+500 * add simple methods * add native BufferList * use RopeBuilder * use Deque 2022-08-25feat: implement native os module (#1115)Gravatar Hyro 27-15/+1820 * feat: implement os module * revert(bun-error): package-lock.json * feat: implement EOL * feat: implement EOL * feat: implement arch function * feat: implement homedir function * add comptime to homedir if * feat: add platform function * feat: implement type function * feat: add hostname (not sure iff works on all platforms) * chore: make requested changes * fix: change toValueGC into toValue in arch function * add EOL, devNull constant variables * fix: store only string * feat: add tests * feat: add endianness * ususe toValue for devNull & EOL * feat: implement endianness & fix release * revert javascript.zig fix * feat: implement tmpdir * feat: implement totalmem, freemem, uptime * feat: loadavg * feat: implement version * feat: add userInfo * feat: implement totalmem for macos * feat: add getPriority (not finished, waiting for dc response) * feat: finish userInfo implementation * feat: implement cpus, not done * feat: finish getPriority implementation & stats cpus() * feat: implement setPriority * reemove test.c * feat: implement constants.dlope.xn, constants.priority.x, constants.UV_UDP_REUSEADDR * feat: implement signals, errno * updated cpus function, stilldoesnt work * increase object length * feat: add t more ests * feat: add cpus() * remov some files * fix: handle empty array * started working on interface addresses (in C) ill use C++ after it work * fix interface_addresses * Improved getCpuInfo code, decreased ram usage, increased speed * getCpuTime optimizations * started working on networkInterfaces * feat: networkInterfaces implementation * delete unnecessary files * add benchs & fix code * add tests * add missing benchs * Increased buffer of getCpuInfo to 2048, it should skip few iterations * remove hardcoded constants * feat: implement errno constants * fix getWindowsErrorConstant * feat: add signal constants * feat: implement priority constants * remove duplications * fix: change value to ?i16 * fix(__defineConstant): make some parameters comptime, change value to ?i32 * fix: add E to ERRNO constants, add SIG to SIG constants * feat: add dlopen constants * change functions to private * feat: add UV_UDP_REUSEADDR * fix typo * simplify functions * rename functions in bindings * feat: implement loadavg for darwin * feat: implement system uptime * feat: implement get free memory for darwin * fix system memory bindings * feat: implement network interfaces for darwin * code cleanup * feat: support for macos version & release * some fixes * MacOS support for CpuInfo * Fixed minor mistake in getCpuInfo_B * Delete test.zig * Update c_cpp_properties.json * Update tasks.json * feat: implement scopeid * feat: implement cidr 🚀 * remove unnecesarry changes * remove unnecesarry changes * chore: requested changes Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> * chore: requested changes Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> * chore: requested changes Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> * chore: requested changes Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> * chore: requested changes Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> * chore: requested changes Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> * chore: requested changes Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> * fix: import string * fix: change IPV6 to IPv6 * fix some things * chore: make requested changes * revert: launch.json * fix test * Fixed few memory leaks * testing * again * added len * another test * improved parsing * added small check * Bonk * FINISH 🚀🚀🚀🚀🚀🚀 * Update tasks.json * NetworkInterface test * FINISH 🚀🚀🚀 Co-authored-by: Fire-The-Fox <gajdos.jan77@gmail.com> Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> 2022-08-25Fix `Request` and `Response` in macrosGravatar Jarred Sumner 1-19/+31 2022-08-25Faster way to lookup mimetypeGravatar Jarred Sumner 1-7/+8 2022-08-25Fix incorrect `indexOfNotChar` causing sourcemaps bugsGravatar Jarred Sumner 1-7/+9 2022-08-24Fix clearTimeout and linux timeout (#1138)Gravatar Zilin Zhu 2-5/+11 2022-08-24Add pad back to base64 (#1140)Gravatar Zilin Zhu 1-4/+4 2022-08-23updated minified url polyfill (#1132)Gravatar Sam 1-1/+1 2022-08-23add SlowBuffer (#1133)Gravatar Zilin Zhu 3-1/+15 2022-08-22Remove response poolGravatar Jarred Sumner 3-47/+8 2022-08-22Fix build errorGravatar Jarred Sumner 3-2/+16 2022-08-22woopsGravatar Jarred Sumner 1-1/+0 2022-08-22[node:http] speed up assigning headersGravatar Jarred Sumner 3-75/+58 2022-08-22reduce usage of protectGravatar Jarred Sumner 1-1/+11 2022-08-22Update mime_type.zigGravatar Jarred Sumner 1-0/+6 2022-08-22Improve error message when port is already in useGravatar Jarred Sumner 1-2/+12 2022-08-22Update server.zigGravatar Jarred Sumner 1-2/+2 2022-08-22Support emit Symbol events in EventEmitter (#1129)Gravatar Zilin Zhu 7-122/+278 2022-08-22faster way to read content-typeGravatar Jarred Sumner 1-1/+1 2022-08-22Fix `Buffer.isEncoding`Gravatar Jarred Sumner 1-1/+3 2022-08-22Add some optimizations to FetchHeadersGravatar Jarred Sumner 3-16/+188 2022-08-22Fix import pathGravatar Jarred Sumner 1-1/+1 2022-08-2238% faster `node:http`Gravatar Jarred Sumner 1-77/+203 Before: ```fish ❯ oha http://localhost:3000 -z 2s -c 20 Summary: Success rate: 1.0000 Total: 2.0006 secs Slowest: 0.0095 secs Fastest: 0.0000 secs Average: 0.0003 secs Requests/sec: 69521.0420 ``` After: ``` ❯ oha http://localhost:3000 -z 2s -c 20 Summary: Success rate: 1.0000 Total: 2.0005 secs Slowest: 0.0063 secs Fastest: 0.0000 secs Average: 0.0002 secs Requests/sec: 109119.8614 ``` Code ``` const http = require("http"); const hostname = "127.0.0.1"; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader("Content-Type", "text/plain"); res.end("Hello World!"); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); }); ```