Compare commits

...

3 Commits

Author SHA1 Message Date
Ashcon Partovi
968a7cd314 Format 2023-07-05 13:27:45 -07:00
Ashcon Partovi
1e1fe22be0 Fix incorrect signatures 2023-07-05 13:26:51 -07:00
Ashcon Partovi
17bacd85f9 Fix detect-libc 2023-07-05 13:21:04 -07:00
16 changed files with 125 additions and 101 deletions

View File

@@ -0,0 +1,34 @@
#include "root.h"
#include "JavaScriptCore/JavaScript.h"
#include "wtf/text/WTFString.h"
#include "JavaScriptCore/ObjectConstructor.h"
#if defined(__LINUX__)
#include <gnu/libc-version.h>
#endif
using namespace JSC;
using namespace WTF;
JSC::JSObject* createDetectLibcModule(JSC::JSGlobalObject* globalObject)
{
VM& vm = globalObject->vm();
JSC::JSObject* object = nullptr;
{
JSC::ObjectInitializationScope initializationScope(vm);
object = JSC::constructEmptyObject(globalObject, globalObject->objectPrototype(), 2);
#if defined(__LINUX__)
auto version = JSC::jsString(vm, makeAtomString(gnu_get_libc_version()));
auto family = JSC::jsString(vm, makeAtomString("glibc"));
#else
auto version = JSC::jsNull();
auto family = JSC::jsNull();
#endif
object->putDirect(vm, JSC::Identifier::fromString(vm, "version"_s), version, JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | 0);
object->putDirect(vm, JSC::Identifier::fromString(vm, "family"_s), family, JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontDelete | 0);
}
return object;
}

View File

@@ -0,0 +1,4 @@
#include "root.h"
#include "JavaScriptCore/JSObject.h"
JSC::JSObject* createDetectLibcModule(JSC::JSGlobalObject* globalObject);

View File

@@ -1,6 +1,6 @@
// AUTO-GENERATED FILE. DO NOT EDIT.
// Generated by 'make generate-sink' at 2023-07-02T16:19:51.440Z
// Generated by 'make generate-sink' at 2023-07-05T19:37:39.554Z
// To regenerate this file, run:
//
// make generate-sink

View File

@@ -1,6 +1,6 @@
// AUTO-GENERATED FILE. DO NOT EDIT.
// Generated by 'make generate-sink' at 2023-07-02T16:19:51.438Z
// Generated by 'make generate-sink' at 2023-07-05T19:37:39.553Z
//
#pragma once

View File

@@ -1,4 +1,4 @@
// Automatically generated from src/bun.js/bindings/JSSink.cpp using /home/cirospaciari/Repos/bun/src/bun.js/WebKit/Source/JavaScriptCore/create_hash_table. DO NOT EDIT!
// Automatically generated from src/bun.js/bindings/JSSink.cpp using /Users/ashcon/Desktop/code/bun/src/bun.js/WebKit/Source/JavaScriptCore/create_hash_table. DO NOT EDIT!

View File

@@ -114,6 +114,8 @@
#include "JSEnvironmentVariableMap.h"
#include "DOMIsoSubspaces.h"
#include "BunDetectLibcModule.h"
#if ENABLE(REMOTE_INSPECTOR)
#include "JavaScriptCore/RemoteInspectorServer.h"
#endif
@@ -1587,6 +1589,10 @@ JSC:
return JSValue::encode(obj);
}
if (string == "detect-libc"_s) {
return JSC::JSValue::encode(createDetectLibcModule(globalObject));
}
if (UNLIKELY(string == "noop"_s)) {
auto* obj = constructEmptyObject(globalObject);
obj->putDirectCustomAccessor(vm, JSC::PropertyName(JSC::Identifier::fromString(vm, "getterSetter"_s)), JSC::CustomGetterSetter::create(vm, noop_getter, noop_setter), 0);

View File

@@ -1868,7 +1868,7 @@ pub const ModuleLoader = struct {
.@"node:wasi" => return jsResolvedSource(jsc_vm, jsc_vm.load_builtins_from_path, .@"node:wasi", "node/wasi.js", specifier),
.@"node:zlib" => return jsResolvedSource(jsc_vm, jsc_vm.load_builtins_from_path, .@"node:zlib", "node/zlib.js", specifier),
.@"detect-libc" => return jsResolvedSource(jsc_vm, jsc_vm.load_builtins_from_path, .@"detect-libc", if (Environment.isLinux) "thirdparty/detect-libc.linux.js" else "thirdparty/detect-libc.js", specifier),
.@"detect-libc" => return jsResolvedSource(jsc_vm, jsc_vm.load_builtins_from_path, .@"detect-libc", "thirdparty/detect-libc.js", specifier),
.undici => return jsResolvedSource(jsc_vm, jsc_vm.load_builtins_from_path, .undici, "thirdparty/undici.js", specifier),
.ws => return jsResolvedSource(jsc_vm, jsc_vm.load_builtins_from_path, .ws, "thirdparty/ws.js", specifier),

View File

@@ -1,24 +1,27 @@
function version() {
return Promise.resolve(libcVersion);
}
function versionSync() {
return libcVersion;
}
function family() {
return Promise.resolve(familySync());
return Promise.resolve(libcFamily);
}
function familySync() {
return null;
}
function versionAsync() {
return Promise.resolve(version());
}
function version() {
return null;
}
function isNonGlibcLinuxSync() {
return !1;
return libcFamily;
}
function isNonGlibcLinux() {
return Promise.resolve(isNonGlibcLinuxSync());
return Promise.resolve(libcFamily === "musl");
}
var GLIBC = "glibc", MUSL = "musl";
function isNonGlibcLinuxSync() {
return libcFamily === "musl";
}
var {
version: libcVersion,
family: libcFamily
} = globalThis[Symbol.for("Bun.lazy")]("detect-libc"), GLIBC = "glibc", MUSL = "musl";
export {
versionAsync,
versionSync,
version,
isNonGlibcLinuxSync,
isNonGlibcLinux,

View File

@@ -1,29 +0,0 @@
function family() {
return Promise.resolve(familySync());
}
function familySync() {
return null;
}
function versionAsync() {
return Promise.resolve(version());
}
function version() {
return null;
}
function isNonGlibcLinuxSync() {
return !1;
}
function isNonGlibcLinux() {
return Promise.resolve(isNonGlibcLinuxSync());
}
var GLIBC = "glibc", MUSL = "musl";
export {
versionAsync,
version,
isNonGlibcLinuxSync,
isNonGlibcLinux,
familySync,
family,
MUSL,
GLIBC
};

View File

@@ -1,27 +1,30 @@
// Hardcoded module "detect-libc" for darwin
export function family() {
return Promise.resolve(familySync());
}
// https://www.npmjs.com/package/detect-libc
export function familySync() {
return null;
}
const { version: libcVersion, family: libcFamily } = globalThis[Symbol.for("Bun.lazy")]("detect-libc");
export const GLIBC = "glibc";
export const MUSL = "musl";
export function versionAsync() {
return Promise.resolve(version());
}
export function version() {
return null;
return Promise.resolve(libcVersion);
}
export function isNonGlibcLinuxSync() {
return false;
export function versionSync() {
return libcVersion;
}
export function family() {
return Promise.resolve(libcFamily);
}
export function familySync() {
return libcFamily;
}
export function isNonGlibcLinux() {
return Promise.resolve(isNonGlibcLinuxSync());
return Promise.resolve(libcFamily === MUSL);
}
export function isNonGlibcLinuxSync() {
return libcFamily === MUSL;
}

View File

@@ -1,35 +0,0 @@
// Hardcoded module "detect-libc" for linux
export function family() {
return Promise.resolve(familySync());
}
export function familySync() {
if (process.platform === "linux") {
return GLIBC;
} else {
return null;
}
}
export const GLIBC = "glibc";
export const MUSL = "musl";
export function versionAsync() {
return Promise.resolve(version());
}
export function version() {
if (process.platform === "linux") {
return "2.29";
} else {
return null;
}
}
export function isNonGlibcLinuxSync() {
return false;
}
export function isNonGlibcLinux() {
return Promise.resolve(isNonGlibcLinuxSync());
}

Binary file not shown.

View File

@@ -0,0 +1,29 @@
import { test, expect } from "bun:test";
import {
GLIBC,
MUSL,
version,
versionSync,
family,
familySync,
isNonGlibcLinux,
isNonGlibcLinuxSync,
// @ts-ignore: @types/detect-libc is not accurate
} from "detect-libc";
test("detect-libc", () => {
expect(GLIBC).toBe("glibc");
expect(MUSL).toBe("musl");
if (process.platform === "linux") {
expect(versionSync()).toMatch(/^\d+\.\d+/);
expect(familySync()).toBe(GLIBC);
expect(isNonGlibcLinuxSync()).toBeFalse();
} else {
expect(versionSync()).toBeNull();
expect(familySync()).toBeNull();
expect(isNonGlibcLinuxSync()).toBeFalse();
}
expect(version()).resolves.toBe(versionSync());
expect(family()).resolves.toBe(familySync());
expect(isNonGlibcLinux()).resolves.toBe(isNonGlibcLinuxSync());
});

View File

@@ -1,7 +1,7 @@
import { describe, it, expect, beforeAll, afterAll } from "bun:test";
import { request } from "undici";
import { createServer } from "../../../http-test-server";
import { createServer } from "../../http-test-server";
describe("undici", () => {
let serverCtl: ReturnType<typeof createServer>;

View File

@@ -0,0 +1,9 @@
import { test, expect } from "bun:test";
import { isUtf8 } from "node:buffer";
import isValidUTF8 from "utf-8-validate";
test("utf-8-validate", () => {
expect(isValidUTF8).toBe(isUtf8);
expect(isValidUTF8(Buffer.from("😀"))).toBeTrue();
expect(isValidUTF8(Buffer.from([0xff]))).toBeFalse();
});

View File

@@ -1,13 +1,13 @@
{
"name": "test",
"devDependencies": {
"@types/dedent": "0.7.0"
"@types/dedent": "0.7.0",
"@types/react": "18.0.28",
"@types/react-dom": "18.0.11"
},
"dependencies": {
"@prisma/client": "4.15.0",
"@swc/core": "1.3.38",
"@types/react": "18.0.28",
"@types/react-dom": "18.0.11",
"bktree-fast": "0.0.7",
"body-parser": "1.20.2",
"dedent": "0.7.0",