From 111966026359bafc558d59242f7064c3e8d299f2 Mon Sep 17 00:00:00 2001 From: Sam Gammon Date: Wed, 5 Mar 2025 15:48:40 -0800 Subject: [PATCH] [wip] continued labs/v5 work Signed-off-by: Sam Gammon --- packages/engine/api/engine.api | 13 ++ .../runtime/interop/InteropProxyObject.kt | 22 ++ .../runtime/interop/ReadOnlyProxyObject.kt | 26 +++ .../runtime/interop/SealedProxyObject.kt | 25 +++ packages/graalvm-js/api/graalvm-js.api | 2 + .../ElideUniversalJsModuleLoader.kt | 25 ++- .../elide/embedded/runtime/js/js.vfs.tar | Bin 256000 -> 256000 bytes packages/graalvm/api/graalvm.api | 194 ++++++------------ packages/graalvm/detekt-baseline.xml | 1 + .../kotlin/elide/runtime/gvm/api/Intrinsic.kt | 6 - .../elide/runtime/node/asserts/NodeAssert.kt | 26 +-- .../elide/runtime/node/buffer/NodeBuffer.kt | 112 ++++++---- .../runtime/node/buffer/NodeBufferClass.kt | 7 +- .../node/childProcess/ChildProcessNative.kt | 12 +- .../node/childProcess/NodeChildProcess.kt | 48 +++-- .../elide/runtime/node/cluster/NodeCluster.kt | 18 +- .../elide/runtime/node/console/NodeConsole.kt | 21 +- .../elide/runtime/node/crypto/NodeCrypto.kt | 21 +- .../elide/runtime/node/dgram/NodeDatagram.kt | 21 +- .../diagnostics/NodeDiagnosticsChannel.kt | 19 +- .../kotlin/elide/runtime/node/dns/NodeDNS.kt | 21 +- .../elide/runtime/node/dns/NodeDNSPromises.kt | 21 +- .../elide/runtime/node/domain/NodeDomain.kt | 21 +- .../runtime/node/os/NodeOperatingSystem.kt | 7 +- .../elide/runtime/node/path/NodePaths.kt | 21 +- .../internals/js/AbstractJsIntrinsicTest.kt | 4 +- .../elide/runtime/gvm/js/AbstractJsTest.kt | 2 +- .../runtime/node/AbstractJsModuleTest.kt | 4 +- .../elide/runtime/node/NodeAssertTest.kt | 7 +- .../elide/runtime/node/NodeBufferTest.kt | 15 +- runtime | 2 +- 31 files changed, 431 insertions(+), 313 deletions(-) create mode 100644 packages/engine/src/main/kotlin/elide/runtime/interop/InteropProxyObject.kt create mode 100644 packages/engine/src/main/kotlin/elide/runtime/interop/ReadOnlyProxyObject.kt create mode 100644 packages/engine/src/main/kotlin/elide/runtime/interop/SealedProxyObject.kt diff --git a/packages/engine/api/engine.api b/packages/engine/api/engine.api index 1528debbf..29fe72e2a 100644 --- a/packages/engine/api/engine.api +++ b/packages/engine/api/engine.api @@ -907,6 +907,19 @@ public abstract interface class elide/runtime/gvm/loader/ModuleResolver { public abstract fun load (Lelide/runtime/gvm/loader/ModuleInfo;)Ljava/lang/Object; } +public abstract interface class elide/runtime/interop/InteropProxyObject : org/graalvm/polyglot/proxy/ProxyObject { +} + +public abstract interface class elide/runtime/interop/ReadOnlyProxyObject : elide/runtime/interop/SealedProxyObject { + public fun putMember (Ljava/lang/String;Lorg/graalvm/polyglot/Value;)V + public fun removeMember (Ljava/lang/String;)Z +} + +public abstract interface class elide/runtime/interop/SealedProxyObject : elide/runtime/interop/InteropProxyObject { + public abstract fun getMemberKeys ()[Ljava/lang/String; + public fun hasMember (Ljava/lang/String;)Z +} + public abstract interface class elide/runtime/lang/Language { public abstract fun getLanguageId ()Ljava/lang/String; } diff --git a/packages/engine/src/main/kotlin/elide/runtime/interop/InteropProxyObject.kt b/packages/engine/src/main/kotlin/elide/runtime/interop/InteropProxyObject.kt new file mode 100644 index 000000000..0fb8d9bbc --- /dev/null +++ b/packages/engine/src/main/kotlin/elide/runtime/interop/InteropProxyObject.kt @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2024-2025 Elide Technologies, Inc. + * + * Licensed under the MIT license (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://opensource.org/license/mit/ + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under the License. + */ +package elide.runtime.interop + +import org.graalvm.polyglot.proxy.ProxyObject + +/** + * ## Interoperable Proxy Object + * + * Describes a [ProxyObject] which is usable by guest languages. + */ +public sealed interface InteropProxyObject : ProxyObject diff --git a/packages/engine/src/main/kotlin/elide/runtime/interop/ReadOnlyProxyObject.kt b/packages/engine/src/main/kotlin/elide/runtime/interop/ReadOnlyProxyObject.kt new file mode 100644 index 000000000..fa9a28c8a --- /dev/null +++ b/packages/engine/src/main/kotlin/elide/runtime/interop/ReadOnlyProxyObject.kt @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2024-2025 Elide Technologies, Inc. + * + * Licensed under the MIT license (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://opensource.org/license/mit/ + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under the License. + */ +package elide.runtime.interop + +import org.graalvm.polyglot.Value +import org.graalvm.polyglot.proxy.ProxyObject + +/** + * ## Read-only Proxy Object + * + * Interop base which defines a [ProxyObject] that forbids writes and deletes. + */ +public interface ReadOnlyProxyObject : SealedProxyObject { + override fun putMember(key: String?, value: Value?): Unit = Unit + override fun removeMember(key: String?): Boolean = false +} diff --git a/packages/engine/src/main/kotlin/elide/runtime/interop/SealedProxyObject.kt b/packages/engine/src/main/kotlin/elide/runtime/interop/SealedProxyObject.kt new file mode 100644 index 000000000..df30f8a9d --- /dev/null +++ b/packages/engine/src/main/kotlin/elide/runtime/interop/SealedProxyObject.kt @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2024-2025 Elide Technologies, Inc. + * + * Licensed under the MIT license (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://opensource.org/license/mit/ + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under the License. + */ +package elide.runtime.interop + +import org.graalvm.polyglot.proxy.ProxyObject + +/** + * ## Sealed Proxy Object + * + * Describes a [ProxyObject] which has a known suite of properties ahead of time. + */ +public interface SealedProxyObject : InteropProxyObject { + override fun getMemberKeys(): Array + override fun hasMember(key: String): Boolean = key in memberKeys +} diff --git a/packages/graalvm-js/api/graalvm-js.api b/packages/graalvm-js/api/graalvm-js.api index d3c0b4369..bbd9a31c5 100644 --- a/packages/graalvm-js/api/graalvm-js.api +++ b/packages/graalvm-js/api/graalvm-js.api @@ -93,7 +93,9 @@ public final class elide/runtime/lang/javascript/NodeModuleName { public static final field CONSTANTS Ljava/lang/String; public static final field CRYPTO Ljava/lang/String; public static final field DGRAM Ljava/lang/String; + public static final field DIAGNOSTICS_CHANNEL Ljava/lang/String; public static final field DNS Ljava/lang/String; + public static final field DNS_PROMISES Ljava/lang/String; public static final field DOMAIN Ljava/lang/String; public static final field EVENTS Ljava/lang/String; public static final field FS Ljava/lang/String; diff --git a/packages/graalvm-js/src/main/kotlin24x/elide/runtime/lang/javascript/ElideUniversalJsModuleLoader.kt b/packages/graalvm-js/src/main/kotlin24x/elide/runtime/lang/javascript/ElideUniversalJsModuleLoader.kt index f9ea4c4d4..754a3f9e2 100644 --- a/packages/graalvm-js/src/main/kotlin24x/elide/runtime/lang/javascript/ElideUniversalJsModuleLoader.kt +++ b/packages/graalvm-js/src/main/kotlin24x/elide/runtime/lang/javascript/ElideUniversalJsModuleLoader.kt @@ -127,8 +127,10 @@ private val allNodeModules = sortedSetOf( public const val CONSOLE: String = "console" public const val CONSTANTS: String = "constants" public const val CRYPTO: String = "crypto" + public const val DIAGNOSTICS_CHANNEL: String = "diagnostics_channel" public const val DGRAM: String = "dgram" public const val DNS: String = "dns" + public const val DNS_PROMISES: String = "dns_promises" public const val DOMAIN: String = "domain" public const val EVENTS: String = "events" public const val FS: String = "fs" @@ -264,16 +266,25 @@ internal class ElideUniversalJsModuleLoader private constructor(realm: JSRealm) private fun setSyntheticModuleExport(module: JSModuleRecord) { module.environment.setObject(defaultExportSlot.index, surface) + val mountPropsFromProxy = { it: ProxyObject -> + for ((slotName, slot) in mappedSlots) { + // module.namespace.X + val member = it.getMember(slotName) + module.environment.setObject(slot.index, realm.env.asGuestValue(member)) + } + } when (surface) { - is ProxyObject -> { - for ((slotName, slot) in mappedSlots) { - // module.namespace.X - val member = surface.getMember(slotName) - module.environment.setObject(slot.index, realm.env.asGuestValue(member)) - } + is ProxyObject -> mountPropsFromProxy(surface) + is SyntheticJSModule<*> -> { + val prox = surface.provide() + if (prox is ProxyObject) { + mountPropsFromProxy(prox) + } else error( + "Provided synthetic module from `SyntheticJSModule.provide` is not a `ProxyObject`: $prox" + ) } - else -> error("Object is usable synthetic module: $surface") + else -> error("Object is unusable synthetic module: $surface") } } } diff --git a/packages/graalvm-js/src/main/resources/META-INF/elide/embedded/runtime/js/js.vfs.tar b/packages/graalvm-js/src/main/resources/META-INF/elide/embedded/runtime/js/js.vfs.tar index 100f0a82d2edc1cbca82c3563048521d992c3456..b55ad80afe846c5401660b8e52fc9ba5315df3a1 100755 GIT binary patch delta 1009 zcmZ8g&rcIU6lU6pCYYkZAgocAM#z>-n*RO)S+q5gs3j=28l!}4+ikn;Zl{@@mJ&c~ zpq5}E*g0@BoQww!Y7hMbG#(9qfzg7|vu#i_1D0$eBLM_NP8|FQ(peN|_yMjI#tV^^R&-2NT&)Gut@I} zu8z-l%IJ3ivz-zBqTn>2nov-(D2sNnTtJwpe45L(DhFT+H1L|)>vy$kkIajpK}Jr9 z+9V`8wqd6XvUu?dU%--ra8eRv6$+i66CIvq9v^$A@5t5#5vsN&ERrJ5v)F#rzQ_?M z(uc({fa$ZM^-hc<9a-&xX|WZg4a3^zR@+2Lz-+S9m|->388NJe=+EMKPlgp#*5FAx zSsECN>AWol!-qtF3{cSb$4>z!nw3%oykO5aa34Lld%Kw^Te}CG{{Oy-&+YTJzex+c zHxGd(Tlr-&aW=}Ve$e6b>L(rc*1S4=UAv+KTMg>)pgN;L^L6#6sqvVj-1?l!?`_uB zhYW#N8-_skxgij!w*?qltB>f_d-b-+Fzw#7pW5n?ojBdWvB$-uayT)t- MZJAokw)y-0KaR*v>i_@% delta 1107 zcmZvb&rcIU6vvsOauP+2lB%#&AX77G7W#vhW>IRi8e3G@MlS}J?QXlWyVLAW5rWkw zP%(;#z5@p@9z1w5Y7@Dd=*5fS0%R2cOz6?>v@6Btd)4wk1DXDi>L%&^c2d# zQR7_O6sF;D&ny_mDO815Mjs~%mu>O7)DJjgUx_J{@LIzjhhjIRPR+z7) zOE^pBGdi6b#!hLOWU8vFSe{VH8BJHbaFk5w^oB22Bof=YGe@QvmAo>8$keo%WHQ^+ z1)|xbwybHM8h2EIsYy@d$=>O_G@Db*5-WR-3>)S_tP@MIsXn7zn7XdWtT3MQk~zXG z$+Tr!-29+PXs6-ZvJe|g#Zrl(!Bm3iLOhyC4)Mukk`#pb{OFa*-088bcy?GOu9y(V z&y8h&dwPwiLdlt1(#5i7M>c08ML{LyzkH{JjQSlHN?NU>W(9lgq&~+KY1Vfp(!u z_~yiuu)A{Ta2~VpyrrCm&}!(C=yx10 z-hQ}XC>BX*ONYYg8Oh=bej*;DqTlftmEm)BxVOkjHs|Sr8+o<58*MKn5#i)aXNT&V ze>RUuO>L&`z}yc9o?dLqv!Pv`{J=lIVz>$Ub@Oj}Qyk3m& zir5wDh6!&Q2VrO97#we;;QMk9+-XF9r_4sM`KfU{@Q7=FdUrYA)UF4#4w! x@4>wP5k{7MjSj%W^8dar%7k?+JmQ?O@a%-)urGna!z19xZ3*l@-I$vbWQ*O diff --git a/packages/graalvm/api/graalvm.api b/packages/graalvm/api/graalvm.api index 2d8e15da9..b7f58dede 100644 --- a/packages/graalvm/api/graalvm.api +++ b/packages/graalvm/api/graalvm.api @@ -514,6 +514,7 @@ public synthetic class elide/runtime/gvm/internals/intrinsics/js/abort/$AbortCon public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -524,6 +525,7 @@ public synthetic class elide/runtime/gvm/internals/intrinsics/js/abort/$AbortSig public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -601,6 +603,7 @@ public synthetic class elide/runtime/gvm/internals/intrinsics/js/base64/$Base64I public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -617,6 +620,7 @@ public synthetic class elide/runtime/gvm/internals/intrinsics/js/codec/$JsEncodi public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -756,6 +760,7 @@ public synthetic class elide/runtime/gvm/internals/intrinsics/js/console/$Consol public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -772,6 +777,7 @@ public synthetic class elide/runtime/gvm/internals/intrinsics/js/crypto/$WebCryp public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -782,6 +788,7 @@ public synthetic class elide/runtime/gvm/internals/intrinsics/js/crypto/$WebCryp public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -792,6 +799,7 @@ public synthetic class elide/runtime/gvm/internals/intrinsics/js/fetch/$FetchInt public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -802,6 +810,7 @@ public synthetic class elide/runtime/gvm/internals/intrinsics/js/stream/$CoreStr public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -930,6 +939,7 @@ public synthetic class elide/runtime/gvm/internals/intrinsics/js/url/$URLIntrins public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -940,6 +950,7 @@ public synthetic class elide/runtime/gvm/internals/intrinsics/js/url/$URLSearchP public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -955,6 +966,7 @@ public synthetic class elide/runtime/gvm/internals/intrinsics/js/webstreams/$Rea public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -986,6 +998,7 @@ public synthetic class elide/runtime/gvm/internals/js/$JsTimersIntrinsic$Definit protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun inject (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;Ljava/lang/Object;)Ljava/lang/Object; public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -1001,17 +1014,12 @@ public synthetic class elide/runtime/gvm/internals/js/$JsTimersIntrinsic$Provide public fun load ()Lio/micronaut/inject/BeanDefinition; } -public synthetic class elide/runtime/gvm/internals/js/$JsTimersIntrinsic$ReflectConfig : io/micronaut/core/graal/GraalReflectionConfigurer { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - public fun getAnnotationMetadata ()Lio/micronaut/core/annotation/AnnotationMetadata; -} - public synthetic class elide/runtime/gvm/internals/sqlite/$ElideSqliteModule$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -1086,6 +1094,7 @@ public synthetic class elide/runtime/gvm/internals/testing/$ElideTestingModule$D public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -5630,16 +5639,7 @@ public synthetic class elide/runtime/node/asserts/$NodeAssertModule$Definition : public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; - public fun isEnabled (Lio/micronaut/context/BeanContext;)Z - public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z - public fun load ()Lio/micronaut/inject/BeanDefinition; -} - -public synthetic class elide/runtime/node/asserts/$NodeAssertModule$Provide0$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V - public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -5650,6 +5650,7 @@ public synthetic class elide/runtime/node/asserts/$NodeAssertStrictModule$Defini public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -5699,27 +5700,11 @@ public final class elide/runtime/node/asserts/NodeAssertionError$Companion { } public synthetic class elide/runtime/node/buffer/$NodeBufferModule$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V - public fun inject (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;Ljava/lang/Object;)Ljava/lang/Object; - public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; - public fun isEnabled (Lio/micronaut/context/BeanContext;)Z - public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z - public fun load ()Lio/micronaut/inject/BeanDefinition; -} - -public synthetic class elide/runtime/node/buffer/$NodeBufferModule$ReflectConfig : io/micronaut/core/graal/GraalReflectionConfigurer { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - public fun getAnnotationMetadata ()Lio/micronaut/core/annotation/AnnotationMetadata; -} - -public synthetic class elide/runtime/node/buffer/$NodeBufferModuleFacade$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -5794,6 +5779,15 @@ protected final class elide/runtime/node/buffer/NodeBlob$NewBlobOptions { public static final field INSTANCE Lelide/runtime/node/buffer/NodeBlob$NewBlobOptions; } +public final class elide/runtime/node/buffer/NodeBufferConstants : elide/runtime/interop/ReadOnlyProxyObject { + public static final field INSTANCE Lelide/runtime/node/buffer/NodeBufferConstants; + public static final field MAX_LENGTH I + public static final field MAX_STRING_LENGTH I + public fun getMember (Ljava/lang/String;)Ljava/lang/Object; + public synthetic fun getMemberKeys ()Ljava/lang/Object; + public fun getMemberKeys ()[Ljava/lang/String; +} + public abstract class elide/runtime/node/buffer/NodeBufferInstance : elide/runtime/intrinsics/js/node/buffer/BufferInstance, org/graalvm/polyglot/proxy/ProxyObject { protected final fun asBufferInstance (Lorg/graalvm/polyglot/Value;)Lelide/runtime/node/buffer/NodeBufferInstance; protected final fun asBufferView-GedIIgk (Lorg/graalvm/polyglot/Value;)Lorg/graalvm/polyglot/Value; @@ -5932,6 +5926,7 @@ public synthetic class elide/runtime/node/childProcess/$NodeChildProcessModule$D public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6002,7 +5997,7 @@ public final class elide/runtime/node/childProcess/ChildProcessFailure : elide/r public final fun getExitCode ()I } -public final class elide/runtime/node/childProcess/ChildProcessHandle : elide/runtime/node/childProcess/AbstractChildProcessHandle, elide/runtime/intrinsics/js/node/childProcess/ChildProcess, org/graalvm/polyglot/proxy/ProxyObject { +public final class elide/runtime/node/childProcess/ChildProcessHandle : elide/runtime/node/childProcess/AbstractChildProcessHandle, elide/runtime/interop/ReadOnlyProxyObject, elide/runtime/intrinsics/js/node/childProcess/ChildProcess { public static final field Companion Lelide/runtime/node/childProcess/ChildProcessHandle$Companion; public synthetic fun (Ljava/lang/Process;Lelide/runtime/node/childProcess/PendingCallResult;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public fun disconnect ()V @@ -6019,12 +6014,9 @@ public final class elide/runtime/node/childProcess/ChildProcessHandle : elide/ru public fun getStdin-ZQ7RXOY ()Ljava/io/OutputStream; public fun getStdio ()Lelide/runtime/intrinsics/js/node/childProcess/ProcessIOChannels; public fun getStdout-yYnEUWU ()Ljava/io/InputStream; - public fun hasMember (Ljava/lang/String;)Z public fun kill (Ljava/lang/String;)V public static final fun live$graalvm (Ljava/lang/Process;Lelide/runtime/node/childProcess/PendingCallResult;)Lelide/runtime/node/childProcess/ChildProcessHandle; - public fun putMember (Ljava/lang/String;Lorg/graalvm/polyglot/Value;)V public fun ref ()Lelide/runtime/intrinsics/js/node/childProcess/ProcessChannel; - public fun removeMember (Ljava/lang/String;)Z public fun send (Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;Lorg/graalvm/polyglot/Value;)Z public fun unref ()Lelide/runtime/intrinsics/js/node/childProcess/ProcessChannel; public fun wait ()I @@ -6099,16 +6091,7 @@ public synthetic class elide/runtime/node/cluster/$NodeClusterModule$Definition public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; - public fun isEnabled (Lio/micronaut/context/BeanContext;)Z - public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z - public fun load ()Lio/micronaut/inject/BeanDefinition; -} - -public synthetic class elide/runtime/node/cluster/$NodeClusterModule$Provide$graalvm0$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V - public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6119,16 +6102,7 @@ public synthetic class elide/runtime/node/console/$NodeConsoleModule$Definition public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; - public fun isEnabled (Lio/micronaut/context/BeanContext;)Z - public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z - public fun load ()Lio/micronaut/inject/BeanDefinition; -} - -public synthetic class elide/runtime/node/console/$NodeConsoleModule$Provide$graalvm0$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V - public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6139,16 +6113,7 @@ public synthetic class elide/runtime/node/crypto/$NodeCryptoModule$Definition : public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; - public fun isEnabled (Lio/micronaut/context/BeanContext;)Z - public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z - public fun load ()Lio/micronaut/inject/BeanDefinition; -} - -public synthetic class elide/runtime/node/crypto/$NodeCryptoModule$Provide$graalvm0$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V - public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6159,16 +6124,7 @@ public synthetic class elide/runtime/node/dgram/$NodeDatagramModule$Definition : public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; - public fun isEnabled (Lio/micronaut/context/BeanContext;)Z - public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z - public fun load ()Lio/micronaut/inject/BeanDefinition; -} - -public synthetic class elide/runtime/node/dgram/$NodeDatagramModule$Provide$graalvm0$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V - public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6179,16 +6135,7 @@ public synthetic class elide/runtime/node/diagnostics/$NodeDiagnosticsChannelMod public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; - public fun isEnabled (Lio/micronaut/context/BeanContext;)Z - public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z - public fun load ()Lio/micronaut/inject/BeanDefinition; -} - -public synthetic class elide/runtime/node/diagnostics/$NodeDiagnosticsChannelModule$Provide$graalvm0$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V - public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6199,16 +6146,7 @@ public synthetic class elide/runtime/node/dns/$NodeDNSModule$Definition : io/mic public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; - public fun isEnabled (Lio/micronaut/context/BeanContext;)Z - public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z - public fun load ()Lio/micronaut/inject/BeanDefinition; -} - -public synthetic class elide/runtime/node/dns/$NodeDNSModule$Provide$graalvm0$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V - public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6219,16 +6157,7 @@ public synthetic class elide/runtime/node/dns/$NodeDNSPromisesModule$Definition public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; - public fun isEnabled (Lio/micronaut/context/BeanContext;)Z - public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z - public fun load ()Lio/micronaut/inject/BeanDefinition; -} - -public synthetic class elide/runtime/node/dns/$NodeDNSPromisesModule$Provide$graalvm0$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V - public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6239,16 +6168,7 @@ public synthetic class elide/runtime/node/domain/$NodeDomainModule$Definition : public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; - public fun isEnabled (Lio/micronaut/context/BeanContext;)Z - public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z - public fun load ()Lio/micronaut/inject/BeanDefinition; -} - -public synthetic class elide/runtime/node/domain/$NodeDomainModule$Provide$graalvm0$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V - public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6259,6 +6179,7 @@ public synthetic class elide/runtime/node/events/$NodeEventsModule$Definition : public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6372,6 +6293,7 @@ public synthetic class elide/runtime/node/http/$NodeHttpModule$Definition : io/m public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6392,6 +6314,7 @@ public synthetic class elide/runtime/node/http2/$NodeHttp2Module$Definition : io public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6412,6 +6335,7 @@ public synthetic class elide/runtime/node/https/$NodeHttpsModule$Definition : io public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6432,6 +6356,7 @@ public synthetic class elide/runtime/node/inspector/$NodeInspectorModule$Definit public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6442,6 +6367,7 @@ public synthetic class elide/runtime/node/inspector/$NodeInspectorPromisesModule public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6452,6 +6378,7 @@ public synthetic class elide/runtime/node/module/$NodeModulesModule$Definition : public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6472,6 +6399,7 @@ public synthetic class elide/runtime/node/net/$NodeNetworkModule$Definition : io public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6572,6 +6500,7 @@ public synthetic class elide/runtime/node/os/$NodeOperatingSystemModule$Definiti public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6796,16 +6725,7 @@ public synthetic class elide/runtime/node/path/$NodePathsModule$Definition : io/ public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; - public fun isEnabled (Lio/micronaut/context/BeanContext;)Z - public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z - public fun load ()Lio/micronaut/inject/BeanDefinition; -} - -public synthetic class elide/runtime/node/path/$NodePathsModule$Provide0$Definition : io/micronaut/context/AbstractInitializableBeanDefinitionAndReference { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V - public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6875,6 +6795,7 @@ public synthetic class elide/runtime/node/perfHooks/$NodePerformanceHooksModule$ public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6895,6 +6816,7 @@ public synthetic class elide/runtime/node/process/$NodeProcessModule$Definition public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6915,6 +6837,7 @@ public synthetic class elide/runtime/node/querystring/$NodeQuerystringModule$Def public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6935,6 +6858,7 @@ public synthetic class elide/runtime/node/readline/$NodeReadlineModule$Definitio public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6955,6 +6879,7 @@ public synthetic class elide/runtime/node/readline/$NodeReadlinePromisesModule$D public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6975,6 +6900,7 @@ public synthetic class elide/runtime/node/stream/$NodeStreamConsumersModule$Defi public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -6995,6 +6921,7 @@ public synthetic class elide/runtime/node/stream/$NodeStreamModule$Definition : public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -7015,6 +6942,7 @@ public synthetic class elide/runtime/node/stream/$NodeStreamPromisesModule$Defin public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -7035,6 +6963,7 @@ public synthetic class elide/runtime/node/stream/$NodeStreamWebModule$Definition public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -7055,6 +6984,7 @@ public synthetic class elide/runtime/node/stringDecoder/$NodeStringDecoderModule public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -7075,6 +7005,7 @@ public synthetic class elide/runtime/node/test/$NodeTestModule$Definition : io/m public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -7095,6 +7026,7 @@ public synthetic class elide/runtime/node/url/$NodeURLModule$Definition : io/mic public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -7115,6 +7047,7 @@ public synthetic class elide/runtime/node/worker/$NodeWorkerModule$Definition : public fun ()V protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; @@ -7146,17 +7079,12 @@ public synthetic class elide/runtime/node/zlib/$NodeZlibModule$Definition : io/m protected fun (Ljava/lang/Class;Lio/micronaut/context/AbstractInitializableBeanDefinition$MethodOrFieldReference;)V public fun inject (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;Ljava/lang/Object;)Ljava/lang/Object; public fun instantiate (Lio/micronaut/context/BeanResolutionContext;Lio/micronaut/context/BeanContext;)Ljava/lang/Object; + public fun isContextScope ()Z public fun isEnabled (Lio/micronaut/context/BeanContext;)Z public fun isEnabled (Lio/micronaut/context/BeanContext;Lio/micronaut/context/BeanResolutionContext;)Z public fun load ()Lio/micronaut/inject/BeanDefinition; } -public synthetic class elide/runtime/node/zlib/$NodeZlibModule$ReflectConfig : io/micronaut/core/graal/GraalReflectionConfigurer { - public static final field $ANNOTATION_METADATA Lio/micronaut/core/annotation/AnnotationMetadata; - public fun ()V - public fun getAnnotationMetadata ()Lio/micronaut/core/annotation/AnnotationMetadata; -} - public final class elide/runtime/node/zlib/ModernNodeZlibConstants : elide/runtime/intrinsics/js/node/zlib/NodeZlibConstants { public static final field INSTANCE Lelide/runtime/node/zlib/ModernNodeZlibConstants; public fun equals (Ljava/lang/Object;)Z diff --git a/packages/graalvm/detekt-baseline.xml b/packages/graalvm/detekt-baseline.xml index 6c0bac52a..a70ad339a 100644 --- a/packages/graalvm/detekt-baseline.xml +++ b/packages/graalvm/detekt-baseline.xml @@ -9,6 +9,7 @@ ForbiddenComment:JavaScript.kt$JavaScript$// @TODO: breakage in graalvm with `en_US` ForbiddenComment:JsEncoding.kt$TextDecoder$// @TODO: honor `DecodeOptions` from host? ForbiddenComment:NettyHttpResponse.kt$NettyHttpResponse$// TODO: support JSON objects and other types of content + ForbiddenComment:NodeChildProcess.kt$NodeChildProcessModule$// @TODO: need ProxyObject support for NodeChildProcess ForbiddenComment:NodeOperatingSystem.kt$NodeOperatingSystem.BaseOS$// @TODO: implement 5 and 15 minute averages ForbiddenComment:NodePathTest.kt$NodePathTest$// @TODO: adopting `ProxyObject` means this object will no longer show up as a host object. ForbiddenComment:NodePathTest.kt$NodePathTest$// @TODO: this was the first use of the `assert` module; the order of expected/actual args is probably wrong diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/gvm/api/Intrinsic.kt b/packages/graalvm/src/main/kotlin/elide/runtime/gvm/api/Intrinsic.kt index 34a400978..680b359cd 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/gvm/api/Intrinsic.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/gvm/api/Intrinsic.kt @@ -13,10 +13,7 @@ package elide.runtime.gvm.api import io.micronaut.context.annotation.DefaultScope -import io.micronaut.context.annotation.Infrastructure -import io.micronaut.core.annotation.ReflectiveAccess import elide.annotations.Context -import elide.annotations.Singleton import elide.runtime.gvm.GraalVMGuest /** @@ -31,10 +28,7 @@ import elide.runtime.gvm.GraalVMGuest * @param language Defines the language this intrinsic is implemented for; defaults to JavaScript which is the only * supported guest language at this time. */ -@Singleton -@Infrastructure @MustBeDocumented -@ReflectiveAccess @DefaultScope(Context::class) @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.SOURCE) diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/asserts/NodeAssert.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/asserts/NodeAssert.kt index efb48fb52..9f807e555 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/asserts/NodeAssert.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/asserts/NodeAssert.kt @@ -21,7 +21,6 @@ package elide.runtime.node.asserts -import io.micronaut.context.annotation.Factory import org.graalvm.polyglot.Value import org.graalvm.polyglot.Value.asValue import org.graalvm.polyglot.proxy.ProxyArray @@ -35,7 +34,6 @@ import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicReference import java.util.function.Function import kotlin.jvm.optionals.getOrNull -import elide.annotations.Singleton import elide.runtime.gvm.api.Intrinsic import elide.runtime.gvm.internals.intrinsics.js.AbstractNodeBuiltinModule import elide.runtime.gvm.js.JsSymbol.JsSymbols.asJsSymbol @@ -94,12 +92,10 @@ private val assertionModuleMethods = arrayOf( METHOD_DOES_NOT_REJECT, ) - // Installs the Node assert module into the intrinsic bindings. -@Intrinsic -@Factory internal class NodeAssertModule : SyntheticJSModule, AbstractNodeBuiltinModule() { +@Intrinsic internal class NodeAssertModule : SyntheticJSModule, AbstractNodeBuiltinModule() { private val instance = NodeAssert.obtain() - @Singleton override fun provide(): AssertAPI = instance + override fun provide(): AssertAPI = instance override fun install(bindings: MutableIntrinsicBindings) { bindings[ASSERT_MODULE_SYMBOL.asJsSymbol()] = provide() @@ -367,7 +363,7 @@ internal class NodeAssert : AssertAPI { is Double -> actual.toDouble() == expected.toDouble() // == Double is BigInteger -> BigInteger.valueOf(actual.toLong()) == expected // == BigInteger is String -> actual.toString() == expected // == String - else -> actual == expected + else -> false } // UInt == ... @@ -393,7 +389,7 @@ internal class NodeAssert : AssertAPI { is Double -> actual.toDouble() == expected // == Double is BigInteger -> actual.toBigInteger() == expected // == BigInteger is String -> actual.toString() == expected // == String - else -> actual == expected + else -> false } // Short == ... @@ -406,7 +402,7 @@ internal class NodeAssert : AssertAPI { is Double -> actual.toDouble() == expected // == Double is BigInteger -> BigInteger.valueOf(actual.toLong()) == expected // == BigInteger is String -> actual.toString() == expected // == String - else -> actual == expected + else -> false } // Float == ... @@ -419,7 +415,7 @@ internal class NodeAssert : AssertAPI { is Long -> actual == expected.toFloat() // == Long is BigInteger -> actual == expected.toFloat() // == BigInteger is String -> actual.toString() == expected // == String - else -> actual == expected + else -> false } // Double == ... @@ -432,7 +428,7 @@ internal class NodeAssert : AssertAPI { is Float -> actual.toFloat() == expected // == Float is BigInteger -> actual == expected.toDouble() // == BigInteger is String -> actual.toString() == expected // == String - else -> actual == expected + else -> false } // BigInteger == ... @@ -453,14 +449,12 @@ internal class NodeAssert : AssertAPI { } // if only one side is a guest value, wrap the other side as a guest value for comparison - actual is Value || expected is Value -> checkEqual( + else -> checkEqual( condition, - if (actual is Value) actual else asValue(actual), - if (expected is Value) expected else asValue(expected), + actual as? Value ?: asValue(actual), + expected as? Value ?: asValue(expected), message, ) - - else -> error("Incomparable guest types") } }.also { if (it != condition) diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/buffer/NodeBuffer.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/buffer/NodeBuffer.kt index fd3315744..bd2bed5c4 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/buffer/NodeBuffer.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/buffer/NodeBuffer.kt @@ -16,50 +16,83 @@ import org.graalvm.polyglot.Value import org.graalvm.polyglot.proxy.ProxyExecutable import org.graalvm.polyglot.proxy.ProxyObject import java.util.* -import elide.annotations.Inject -import elide.annotations.Singleton import elide.runtime.core.DelicateElideApi import elide.runtime.gvm.api.Intrinsic import elide.runtime.gvm.internals.intrinsics.js.AbstractNodeBuiltinModule import elide.runtime.gvm.js.JsSymbol.JsSymbols.asJsSymbol import elide.runtime.gvm.js.JsSymbol.JsSymbols.asPublicJsSymbol +import elide.runtime.gvm.loader.ModuleInfo +import elide.runtime.gvm.loader.ModuleRegistry +import elide.runtime.interop.ReadOnlyProxyObject import elide.runtime.intrinsics.GuestIntrinsic.MutableIntrinsicBindings import elide.runtime.intrinsics.js.node.BufferAPI +import elide.runtime.lang.javascript.NodeModuleName -/** Internal symbol where the bindings for the 'buffer' module are installed. */ -private const val BUFFER_MODULE_SYMBOL_ROOT = "node_buffer" +// Internal symbol where the bindings for the 'buffer' module are installed. +private const val BUFFER_MODULE_SYMBOL_ROOT = "node_${NodeModuleName.BUFFER}" -/** Symbol at which the main module intrinsic is installed. */ +// Symbol at which the main module intrinsic is installed. private const val BUFFER_MODULE_SYMBOL = "${BUFFER_MODULE_SYMBOL_ROOT}_module" -/** Symbol at which the [NodeBlob] class is installed. */ +// Symbol at which the [NodeBlob] class is installed. private const val BLOB_SYMBOL = "Blob" -/** Symbol at which the [NodeBlob] class is installed. */ +// Symbol at which the [NodeBlob] class is installed. private const val FILE_SYMBOL = "File" -/** Symbol at which the [NodeBlob] class is installed. */ +// Symbol at which the [NodeBlob] class is installed. private const val BUFFER_TYPE_SYMBOL = "Buffer" +// Symbol at which the `SlowBuffer` class is installed. +private const val SLOWBUFFER_TYPE_SYMBOL = "SlowBuffer" + +private const val F_RESOLVE_OBJECT_URL = "resolveObjectURL" +private const val F_IS_ASCII = "isAscii" +private const val F_IS_UTF8 = "isUtf8" +private const val F_TRANSCODE = "transcode" +private const val K_MAX_LENGTH_CONST = "kMaxLength" +private const val K_STRING_MAX_LEGNTH_CONST = "kStringMaxLength" +private const val K_ATOB = "atob" +private const val K_BTOA = "btoa" +private const val K_CONSTANTS = "constants" + // Installs the Node `buffer` built-in module. -@Intrinsic -internal class NodeBufferModule : AbstractNodeBuiltinModule() { - @Inject lateinit var facade: NodeBufferModuleFacade +@Intrinsic internal class NodeBufferModule : AbstractNodeBuiltinModule() { + private val singleton by lazy { NodeBufferModuleFacade() } + fun provide() = singleton @OptIn(DelicateElideApi::class) override fun install(bindings: MutableIntrinsicBindings) { - bindings[BUFFER_MODULE_SYMBOL.asJsSymbol()] = facade + bindings[BUFFER_MODULE_SYMBOL.asJsSymbol()] = provide() bindings[BLOB_SYMBOL.asPublicJsSymbol()] = NodeBlob::class.java bindings[FILE_SYMBOL.asPublicJsSymbol()] = NodeFile::class.java // A single NodeBufferClass instance acts as meta-object for the `Buffer` type; // it will also be exposed as part of the `node:buffer` module by guest init code - bindings[BUFFER_TYPE_SYMBOL.asPublicJsSymbol()] = NodeBufferClass() + bindings[BUFFER_TYPE_SYMBOL.asPublicJsSymbol()] = NodeBufferClass.SINGLETON + + ModuleRegistry.deferred(ModuleInfo.of(NodeModuleName.BUFFER)) { + provide() + } + } +} + +// Constants made available as part of the Buffer module. +public object NodeBufferConstants : ReadOnlyProxyObject { + public const val MAX_LENGTH: Int = 0 + public const val MAX_STRING_LENGTH: Int = 0 + + override fun getMemberKeys(): Array = arrayOf(K_MAX_LENGTH_CONST, K_STRING_MAX_LEGNTH_CONST) + + override fun getMember(key: String): Any? = when (key) { + K_MAX_LENGTH_CONST -> MAX_LENGTH + K_STRING_MAX_LEGNTH_CONST -> K_MAX_LENGTH_CONST + else -> null } } // Module facade which satisfies the built-in `Buffer` module. -@Singleton internal class NodeBufferModuleFacade : BufferAPI, ProxyObject { +internal class NodeBufferModuleFacade : BufferAPI, ProxyObject { override fun atob(data: Value): String { val base64 = if (data.isString) data.asString() else data.toString() val bytes = Base64.getDecoder().decode(base64) @@ -115,7 +148,7 @@ internal class NodeBufferModule : AbstractNodeBuiltinModule() { else -> return false // invalid UTF-8 sequence } - // multi-byte character, each byte after the first starts with 10xxxxxx + // multibyte character, each byte after the first starts with 10xxxxxx else -> { if (byte shr UTF8_PREFIX_MULTIBYTE_OFFSET != UTF8_PREFIX_MULTIBYTE) return false expected-- @@ -152,27 +185,29 @@ internal class NodeBufferModule : AbstractNodeBuiltinModule() { error("Unable to read buffer elements from the specified value.") } - override fun getMemberKeys(): Any { - return moduleMembers - } - - override fun hasMember(key: String): Boolean { - return moduleMembers.binarySearch(key) >= 0 - } + override fun getMemberKeys(): Array = moduleMembers + override fun hasMember(key: String): Boolean = moduleMembers.binarySearch(key) >= 0 + @OptIn(DelicateElideApi::class) @Suppress("MagicNumber") override fun getMember(key: String?): Any? = when (key) { - "atob" -> ProxyExecutable { atob(it.singleOrNull() ?: error("Expected exactly 1 argument for 'atob'")) } - "btoa" -> ProxyExecutable { btoa(it.singleOrNull() ?: error("Expected exactly 1 argument for 'btoa'")) } - "isAscii" -> ProxyExecutable { isAscii(it.singleOrNull() ?: error("Expected exactly 1 argument for 'isAscii'")) } - "isUtf8" -> ProxyExecutable { isUtf8(it.singleOrNull() ?: error("Expected exactly 1 argument for 'isUtf8'")) } - - "transcode" -> ProxyExecutable { + K_ATOB -> ProxyExecutable { atob(it.singleOrNull() ?: error("Expected exactly 1 argument for 'atob'")) } + K_BTOA -> ProxyExecutable { btoa(it.singleOrNull() ?: error("Expected exactly 1 argument for 'btoa'")) } + K_CONSTANTS -> NodeBufferConstants + K_MAX_LENGTH_CONST -> NodeBufferConstants.MAX_LENGTH + K_STRING_MAX_LEGNTH_CONST -> NodeBufferConstants.MAX_STRING_LENGTH + F_IS_ASCII -> ProxyExecutable { isAscii(it.singleOrNull() ?: error("Expected exactly 1 argument for 'isAscii'")) } + F_IS_UTF8 -> ProxyExecutable { isUtf8(it.singleOrNull() ?: error("Expected exactly 1 argument for 'isUtf8'")) } + + F_TRANSCODE -> ProxyExecutable { if (it.size != 3) error("Expected exactly 1 argument for 'transcode'") transcode(it[0], it[1].asString(), it[2].asString()) } - "resolveObjectUrl" -> ProxyExecutable { + BLOB_SYMBOL -> NodeBlob::class.java + BUFFER_TYPE_SYMBOL -> NodeBufferClass.SINGLETON + FILE_SYMBOL -> NodeFile::class.java + F_RESOLVE_OBJECT_URL -> ProxyExecutable { val id = it.singleOrNull()?.asString() ?: error("Expected exactly 1 argument for 'isUtf8'") resolveObjectUrl(id) } @@ -217,12 +252,19 @@ internal class NodeBufferModule : AbstractNodeBuiltinModule() { /** Static list of members exposed to guest code. */ private val moduleMembers = arrayOf( - "atob", - "btoa", - "isAscii", - "isUtf8", - "transcode", - "resolveObjectUrl", + K_ATOB, + K_BTOA, + K_CONSTANTS, + K_MAX_LENGTH_CONST, + K_STRING_MAX_LEGNTH_CONST, + F_IS_ASCII, + F_IS_UTF8, + F_TRANSCODE, + F_RESOLVE_OBJECT_URL, + BLOB_SYMBOL, + BUFFER_TYPE_SYMBOL, + FILE_SYMBOL, + SLOWBUFFER_TYPE_SYMBOL, ).apply { sort() } } } diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/buffer/NodeBufferClass.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/buffer/NodeBufferClass.kt index cf0185b93..ee8fdea1d 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/buffer/NodeBufferClass.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/buffer/NodeBufferClass.kt @@ -22,7 +22,7 @@ import elide.runtime.gvm.js.JsError.typeError import elide.runtime.intrinsics.js.node.buffer.BufferClass import elide.runtime.intrinsics.js.node.buffer.BufferInstance -@DelicateElideApi internal class NodeBufferClass : BufferClass { +@DelicateElideApi internal class NodeBufferClass private constructor () : BufferClass { override var poolSize: Int = 8192 private fun PolyglotValue.asBufferOrNull(): BufferInstance? { @@ -265,7 +265,10 @@ import elide.runtime.intrinsics.js.node.buffer.BufferInstance error("Modifying the Buffer prototype is not allowed") } - private companion object { + companion object { + internal val SINGLETON = NodeBufferClass() + @JvmStatic fun obtain(): NodeBufferClass = SINGLETON + private val staticMembers = arrayOf( "alloc", "allocUnsafe", diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/childProcess/ChildProcessNative.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/childProcess/ChildProcessNative.kt index 68b17955f..b6ddc2ca2 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/childProcess/ChildProcessNative.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/childProcess/ChildProcessNative.kt @@ -12,6 +12,9 @@ */ package elide.runtime.node.childProcess +// Library name for POSIX natives. +private const val LIB_POSIX = "posix" + /** * # Child Process: Native Utilities * @@ -19,8 +22,13 @@ package elide.runtime.node.childProcess * by operating system. */ internal object ChildProcessNative { - init { - System.loadLibrary("posix") + @Volatile private var libLoaded = false + + @JvmStatic fun initialize() { + if (!libLoaded) { + System.loadLibrary(LIB_POSIX) + libLoaded = true + } } /** diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/childProcess/NodeChildProcess.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/childProcess/NodeChildProcess.kt index ecad2d050..03a2a0e18 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/childProcess/NodeChildProcess.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/childProcess/NodeChildProcess.kt @@ -52,6 +52,7 @@ import elide.runtime.gvm.internals.ProcessManager import elide.runtime.gvm.internals.intrinsics.js.AbstractNodeBuiltinModule import elide.runtime.gvm.js.JsError import elide.runtime.gvm.js.JsSymbol.JsSymbols.asJsSymbol +import elide.runtime.interop.ReadOnlyProxyObject import elide.runtime.intrinsics.GuestIntrinsic.MutableIntrinsicBindings import elide.runtime.intrinsics.js.URL import elide.runtime.intrinsics.js.node.ChildProcessAPI @@ -61,6 +62,7 @@ import elide.runtime.intrinsics.js.node.events.EventEmitter import elide.runtime.intrinsics.js.node.events.EventTarget import elide.runtime.intrinsics.js.node.fs.StringOrBuffer import elide.runtime.intrinsics.js.node.path.Path +import elide.runtime.lang.javascript.NodeModuleName import elide.runtime.lang.javascript.SyntheticJSModule import elide.runtime.node.events.EventAware import elide.runtime.node.fs.NodeFilesystemModule @@ -68,11 +70,8 @@ import elide.runtime.node.fs.resolveEncodingString import elide.vm.annotations.Polyglot import com.google.common.util.concurrent.ListenableFuture as Future -// Name of the child process module. -private const val CHILD_PROCESS_MODULE_NAME = "child_process" - // Internal symbol where the Node built-in module is installed. -private const val CHILD_PROCESS_MODULE_SYMBOL = "node_${CHILD_PROCESS_MODULE_NAME}" +private const val CHILD_PROCESS_MODULE_SYMBOL = "node_${NodeModuleName.CHILD_PROCESS}" // Internal symbol where the Node `ChildProcess` class is installed. private const val CHILD_PROCESS_CLASS_SYMBOL = "NodeChildProcess" @@ -80,6 +79,9 @@ private const val CHILD_PROCESS_CLASS_SYMBOL = "NodeChildProcess" // Symbol indicating a no-encoding return. private const val NO_ENCODING = ChildProcessDefaults.ENCODING +// Whether to enable IPC features. +private const val ENABLE_ELIDE_IPC_BOOT = false + // Names of events which are emitted for/upon `ChildProcess` objects. internal data object ChildProcessEvents { const val CLOSE = "close" @@ -104,19 +106,26 @@ private val globalIpcServer by lazy { InterElideIPCServer() } override fun stderr(): OutputStream? = System.err } - private val instance = NodeChildProcess.obtain( - { globalIpcServer }, - filesystem, - executorProvider, - defaultStandardStreams, - ) + private val instance by lazy { + NodeChildProcess.obtain( + { globalIpcServer }, + filesystem, + executorProvider, + defaultStandardStreams, + ).also { + ChildProcessNative.initialize() + } + } @Singleton override fun provide(): ChildProcessAPI = instance @Singleton internal fun ipcServer(): InterElideIPCServer = globalIpcServer override fun install(bindings: MutableIntrinsicBindings) { - bindings[CHILD_PROCESS_MODULE_SYMBOL.asJsSymbol()] = provide() + bindings[CHILD_PROCESS_MODULE_SYMBOL.asJsSymbol()] = ProxyExecutable { instance } bindings[CHILD_PROCESS_CLASS_SYMBOL.asJsSymbol()] = ChildProcessHandle::class.java + + // @TODO: need ProxyObject support for NodeChildProcess + // ModuleRegistry.deferred(ModuleInfo.of(NodeModuleName.CHILD_PROCESS)) { instance } } } @@ -508,7 +517,7 @@ private fun prepareFileExec(file: Value, args: Value?): Triple try { file.`as`(URL::class.java) to null - } catch (e: ClassCastException) { + } catch (_: ClassCastException) { null to null } @@ -663,7 +672,7 @@ public abstract class AbstractChildProcessHandle internal constructor( public class ChildProcessHandle private constructor( private val proc: Process, private val pending: PendingCallResult<*>, -) : ProxyObject, ChildProcess, AbstractChildProcessHandle() { +) : ReadOnlyProxyObject, ChildProcess, AbstractChildProcessHandle() { // Bound IPC channel for this process handle, if available. private val liveIpcChannel: AtomicRef = atomic(null) @@ -741,11 +750,6 @@ public class ChildProcessHandle private constructor( } override fun getMemberKeys(): Array = CHILD_PROCESS_HANDLE_PROPS_AND_METHODS - override fun hasMember(key: String?): Boolean = key != null && key in CHILD_PROCESS_HANDLE_PROPS_AND_METHODS - override fun putMember(key: String?, value: Value?) {/* no-op */ - } - - override fun removeMember(key: String?): Boolean = false override fun getMember(key: String?): Any? = when (key) { "pid" -> pid @@ -966,9 +970,11 @@ internal class NodeChildProcess( private val executor by lazy { executorProvider.executor() } init { - Dispatchers.IO.dispatch(EmptyCoroutineContext) { - if (shouldStartIpcAtInit()) { - ipcSupplier.get().initialize() + if (ENABLE_ELIDE_IPC_BOOT) { + Dispatchers.Unconfined.dispatch(EmptyCoroutineContext) { + if (shouldStartIpcAtInit()) { + ipcSupplier.get().initialize() + } } } } diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/cluster/NodeCluster.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/cluster/NodeCluster.kt index aed202256..c8483371d 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/cluster/NodeCluster.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/cluster/NodeCluster.kt @@ -12,35 +12,43 @@ */ package elide.runtime.node.cluster -import elide.annotations.Factory -import elide.annotations.Singleton import elide.runtime.gvm.api.Intrinsic import elide.runtime.gvm.internals.intrinsics.js.AbstractNodeBuiltinModule import elide.runtime.gvm.js.JsSymbol.JsSymbols.asJsSymbol +import elide.runtime.gvm.loader.ModuleInfo +import elide.runtime.gvm.loader.ModuleRegistry +import elide.runtime.interop.ReadOnlyProxyObject import elide.runtime.intrinsics.GuestIntrinsic.MutableIntrinsicBindings import elide.runtime.intrinsics.js.node.ClusterAPI +import elide.runtime.lang.javascript.NodeModuleName // Internal symbol where the Node built-in module is installed. private const val CLUSTER_MODULE_SYMBOL = "node_cluster" // Installs the Node cluster module into the intrinsic bindings. @Intrinsic -@Factory internal class NodeClusterModule : AbstractNodeBuiltinModule() { - @Singleton internal fun provide(): ClusterAPI = NodeCluster.obtain() +internal class NodeClusterModule : AbstractNodeBuiltinModule() { + internal fun provide(): NodeCluster = NodeCluster.obtain() override fun install(bindings: MutableIntrinsicBindings) { bindings[CLUSTER_MODULE_SYMBOL.asJsSymbol()] = provide() + ModuleRegistry.deferred(ModuleInfo.of(NodeModuleName.CLUSTER)) { + provide() + } } } /** * # Node API: `cluster` */ -internal class NodeCluster : ClusterAPI { +internal class NodeCluster : ReadOnlyProxyObject, ClusterAPI { // internal companion object { private val SINGLETON = NodeCluster() fun obtain(): NodeCluster = SINGLETON } + + override fun getMemberKeys(): Array = emptyArray() + override fun getMember(key: String?): Any? = null } diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/console/NodeConsole.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/console/NodeConsole.kt index a4af3e9bf..af018b5bd 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/console/NodeConsole.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/console/NodeConsole.kt @@ -12,35 +12,42 @@ */ package elide.runtime.node.console -import elide.annotations.Factory -import elide.annotations.Singleton import elide.runtime.gvm.api.Intrinsic import elide.runtime.gvm.internals.intrinsics.js.AbstractNodeBuiltinModule import elide.runtime.gvm.js.JsSymbol.JsSymbols.asJsSymbol +import elide.runtime.gvm.loader.ModuleInfo +import elide.runtime.gvm.loader.ModuleRegistry +import elide.runtime.interop.ReadOnlyProxyObject import elide.runtime.intrinsics.GuestIntrinsic.MutableIntrinsicBindings import elide.runtime.intrinsics.js.node.ConsoleAPI +import elide.runtime.lang.javascript.NodeModuleName // Internal symbol where the Node built-in module is installed. -private const val CONSOLE_MODULE_SYMBOL = "node_console" +private const val CONSOLE_MODULE_SYMBOL = "node_${NodeModuleName.CONSOLE}" // Installs the Node console module into the intrinsic bindings. -@Intrinsic -@Factory internal class NodeConsoleModule : AbstractNodeBuiltinModule() { - @Singleton internal fun provide(): ConsoleAPI = NodeConsole.obtain() +@Intrinsic internal class NodeConsoleModule : AbstractNodeBuiltinModule() { + internal fun provide(): NodeConsole = NodeConsole.obtain() override fun install(bindings: MutableIntrinsicBindings) { bindings[CONSOLE_MODULE_SYMBOL.asJsSymbol()] = provide() + ModuleRegistry.deferred(ModuleInfo.of(NodeModuleName.CONSOLE)) { provide() } } } /** * # Node API: `console` */ -internal class NodeConsole : ConsoleAPI { +internal class NodeConsole : ReadOnlyProxyObject, ConsoleAPI { // internal companion object { private val SINGLETON = NodeConsole() fun obtain(): NodeConsole = SINGLETON } + + // @TODO not implemented + + override fun getMemberKeys(): Array = emptyArray() + override fun getMember(key: String?): Any? = null } diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/crypto/NodeCrypto.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/crypto/NodeCrypto.kt index c863d9502..29993342f 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/crypto/NodeCrypto.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/crypto/NodeCrypto.kt @@ -12,35 +12,42 @@ */ package elide.runtime.node.crypto -import elide.annotations.Factory -import elide.annotations.Singleton import elide.runtime.gvm.api.Intrinsic import elide.runtime.gvm.internals.intrinsics.js.AbstractNodeBuiltinModule import elide.runtime.gvm.js.JsSymbol.JsSymbols.asJsSymbol +import elide.runtime.gvm.loader.ModuleInfo +import elide.runtime.gvm.loader.ModuleRegistry +import elide.runtime.interop.ReadOnlyProxyObject import elide.runtime.intrinsics.GuestIntrinsic.MutableIntrinsicBindings import elide.runtime.intrinsics.js.node.CryptoAPI +import elide.runtime.lang.javascript.NodeModuleName // Internal symbol where the Node built-in module is installed. -private const val CRYPTO_MODULE_SYMBOL = "node_crypto" +private const val CRYPTO_MODULE_SYMBOL = "node_${NodeModuleName.CRYPTO}" // Installs the Node crypto module into the intrinsic bindings. -@Intrinsic -@Factory internal class NodeCryptoModule : AbstractNodeBuiltinModule() { - @Singleton internal fun provide(): CryptoAPI = NodeCrypto.obtain() +@Intrinsic internal class NodeCryptoModule : AbstractNodeBuiltinModule() { + internal fun provide(): NodeCrypto = NodeCrypto.obtain() override fun install(bindings: MutableIntrinsicBindings) { bindings[CRYPTO_MODULE_SYMBOL.asJsSymbol()] = provide() + ModuleRegistry.deferred(ModuleInfo.of(NodeModuleName.CRYPTO)) { provide() } } } /** * # Node API: `crypto` */ -internal class NodeCrypto : CryptoAPI { +internal class NodeCrypto : ReadOnlyProxyObject, CryptoAPI { // internal companion object { private val SINGLETON = NodeCrypto() fun obtain(): NodeCrypto = SINGLETON } + + // @TODO not yet implemented + + override fun getMemberKeys(): Array = emptyArray() + override fun getMember(key: String?): Any? = null } diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/dgram/NodeDatagram.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/dgram/NodeDatagram.kt index 773d1d23b..3549da47b 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/dgram/NodeDatagram.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/dgram/NodeDatagram.kt @@ -12,35 +12,42 @@ */ package elide.runtime.node.dgram -import elide.annotations.Factory -import elide.annotations.Singleton import elide.runtime.gvm.api.Intrinsic import elide.runtime.gvm.internals.intrinsics.js.AbstractNodeBuiltinModule import elide.runtime.gvm.js.JsSymbol.JsSymbols.asJsSymbol +import elide.runtime.gvm.loader.ModuleInfo +import elide.runtime.gvm.loader.ModuleRegistry +import elide.runtime.interop.ReadOnlyProxyObject import elide.runtime.intrinsics.GuestIntrinsic.MutableIntrinsicBindings import elide.runtime.intrinsics.js.node.DatagramAPI +import elide.runtime.lang.javascript.NodeModuleName // Internal symbol where the Node built-in module is installed. -private const val DATAGRAM_MODULE_SYMBOL = "node_dgram" +private const val DATAGRAM_MODULE_SYMBOL = "node_${NodeModuleName.DGRAM}" // Installs the Node dgram module into the intrinsic bindings. -@Intrinsic -@Factory internal class NodeDatagramModule : AbstractNodeBuiltinModule() { - @Singleton internal fun provide(): DatagramAPI = NodeDatagram.obtain() +@Intrinsic internal class NodeDatagramModule : AbstractNodeBuiltinModule() { + internal fun provide(): DatagramAPI = NodeDatagram.obtain() override fun install(bindings: MutableIntrinsicBindings) { bindings[DATAGRAM_MODULE_SYMBOL.asJsSymbol()] = provide() + ModuleRegistry.deferred(ModuleInfo.of(NodeModuleName.DGRAM)) { provide() } } } /** * # Node API: `datagram` */ -internal class NodeDatagram : DatagramAPI { +internal class NodeDatagram : ReadOnlyProxyObject, DatagramAPI { // internal companion object { private val SINGLETON = NodeDatagram() fun obtain(): NodeDatagram = SINGLETON } + + // @TODO not yet implemented + + override fun getMemberKeys(): Array = emptyArray() + override fun getMember(key: String?): Any? = null } diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/diagnostics/NodeDiagnosticsChannel.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/diagnostics/NodeDiagnosticsChannel.kt index 1a4f43564..6230ee698 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/diagnostics/NodeDiagnosticsChannel.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/diagnostics/NodeDiagnosticsChannel.kt @@ -12,35 +12,40 @@ */ package elide.runtime.node.diagnostics -import elide.annotations.Factory -import elide.annotations.Singleton import elide.runtime.gvm.api.Intrinsic import elide.runtime.gvm.internals.intrinsics.js.AbstractNodeBuiltinModule import elide.runtime.gvm.js.JsSymbol.JsSymbols.asJsSymbol +import elide.runtime.interop.ReadOnlyProxyObject import elide.runtime.intrinsics.GuestIntrinsic.MutableIntrinsicBindings import elide.runtime.intrinsics.js.node.DiagnosticsChannelAPI +import elide.runtime.lang.javascript.NodeModuleName // Internal symbol where the Node built-in module is installed. -private const val DIAGNOSTICS_CHANNEL_MODULE_SYMBOL = "node_diagnostics_channel" +private const val DIAGNOSTICS_CHANNEL_MODULE_SYMBOL = "node_${NodeModuleName.DIAGNOSTICS_CHANNEL}" // Installs the Node `diagnostics_channel` module into the intrinsic bindings. -@Intrinsic -@Factory internal class NodeDiagnosticsChannelModule : AbstractNodeBuiltinModule() { - @Singleton internal fun provide(): DiagnosticsChannelAPI = NodeDiagnosticsChannel.obtain() +@Intrinsic internal class NodeDiagnosticsChannelModule : AbstractNodeBuiltinModule() { + internal fun provide(): DiagnosticsChannelAPI = NodeDiagnosticsChannel.obtain() override fun install(bindings: MutableIntrinsicBindings) { bindings[DIAGNOSTICS_CHANNEL_MODULE_SYMBOL.asJsSymbol()] = provide() + // ModuleRegistry.deferred(ModuleInfo.of(NodeModuleName.DIAGNOSTICS_CHANNEL)) { provide() } } } /** * # Node API: `diagnostics_channel` */ -internal class NodeDiagnosticsChannel : DiagnosticsChannelAPI { +internal class NodeDiagnosticsChannel : ReadOnlyProxyObject, DiagnosticsChannelAPI { // internal companion object { private val SINGLETON = NodeDiagnosticsChannel() fun obtain(): NodeDiagnosticsChannel = SINGLETON } + + // @TODO not yet implemented + + override fun getMemberKeys(): Array = emptyArray() + override fun getMember(key: String?): Any? = null } diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/dns/NodeDNS.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/dns/NodeDNS.kt index fbe6383ac..b48468d0c 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/dns/NodeDNS.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/dns/NodeDNS.kt @@ -12,35 +12,42 @@ */ package elide.runtime.node.dns -import elide.annotations.Factory -import elide.annotations.Singleton import elide.runtime.gvm.api.Intrinsic import elide.runtime.gvm.internals.intrinsics.js.AbstractNodeBuiltinModule import elide.runtime.gvm.js.JsSymbol.JsSymbols.asJsSymbol +import elide.runtime.gvm.loader.ModuleInfo +import elide.runtime.gvm.loader.ModuleRegistry +import elide.runtime.interop.ReadOnlyProxyObject import elide.runtime.intrinsics.GuestIntrinsic.MutableIntrinsicBindings import elide.runtime.intrinsics.js.node.DNSAPI +import elide.runtime.lang.javascript.NodeModuleName // Internal symbol where the Node built-in module is installed. -private const val DNS_MODULE_SYMBOL = "node_dns" +private const val DNS_MODULE_SYMBOL = "node_${NodeModuleName.DNS}" // Installs the Node `dns` module into the intrinsic bindings. -@Intrinsic -@Factory internal class NodeDNSModule : AbstractNodeBuiltinModule() { - @Singleton internal fun provide(): DNSAPI = NodeDNS.obtain() +@Intrinsic internal class NodeDNSModule : AbstractNodeBuiltinModule() { + internal fun provide(): DNSAPI = NodeDNS.obtain() override fun install(bindings: MutableIntrinsicBindings) { bindings[DNS_MODULE_SYMBOL.asJsSymbol()] = provide() + ModuleRegistry.deferred(ModuleInfo.of(NodeModuleName.DNS)) { provide() } } } /** * # Node API: `dns` */ -internal class NodeDNS : DNSAPI { +internal class NodeDNS : ReadOnlyProxyObject, DNSAPI { // internal companion object { private val SINGLETON = NodeDNS() fun obtain(): NodeDNS = SINGLETON } + + // @TODO not yet implemented + + override fun getMemberKeys(): Array = emptyArray() + override fun getMember(key: String?): Any? = null } diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/dns/NodeDNSPromises.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/dns/NodeDNSPromises.kt index 223b7e2fc..49c4909d4 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/dns/NodeDNSPromises.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/dns/NodeDNSPromises.kt @@ -12,35 +12,42 @@ */ package elide.runtime.node.dns -import elide.annotations.Factory -import elide.annotations.Singleton import elide.runtime.gvm.api.Intrinsic import elide.runtime.gvm.internals.intrinsics.js.AbstractNodeBuiltinModule import elide.runtime.gvm.js.JsSymbol.JsSymbols.asJsSymbol +import elide.runtime.gvm.loader.ModuleInfo +import elide.runtime.gvm.loader.ModuleRegistry +import elide.runtime.interop.ReadOnlyProxyObject import elide.runtime.intrinsics.GuestIntrinsic.MutableIntrinsicBindings import elide.runtime.intrinsics.js.node.DNSPromisesAPI +import elide.runtime.lang.javascript.NodeModuleName // Internal symbol where the Node built-in module is installed. -private const val DNS_PROMISES_MODULE_SYMBOL = "node_dns_promises" +private const val DNS_PROMISES_MODULE_SYMBOL = "node_${NodeModuleName.DNS_PROMISES}" // Installs the Node `dns/promises` module into the intrinsic bindings. -@Intrinsic -@Factory internal class NodeDNSPromisesModule : AbstractNodeBuiltinModule() { - @Singleton internal fun provide(): DNSPromisesAPI = NodeDNSPromises.obtain() +@Intrinsic internal class NodeDNSPromisesModule : AbstractNodeBuiltinModule() { + internal fun provide(): DNSPromisesAPI = NodeDNSPromises.obtain() override fun install(bindings: MutableIntrinsicBindings) { bindings[DNS_PROMISES_MODULE_SYMBOL.asJsSymbol()] = provide() + ModuleRegistry.deferred(ModuleInfo.of(NodeModuleName.DNS_PROMISES)) { provide() } } } /** * # Node API: `dns/promises` */ -internal class NodeDNSPromises : DNSPromisesAPI { +internal class NodeDNSPromises : ReadOnlyProxyObject, DNSPromisesAPI { // internal companion object { private val SINGLETON = NodeDNSPromises() fun obtain(): NodeDNSPromises = SINGLETON } + + // @TODO not yet implemented + + override fun getMemberKeys(): Array = emptyArray() + override fun getMember(key: String?): Any? = null } diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/domain/NodeDomain.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/domain/NodeDomain.kt index 2fc57cda2..7ca4b920d 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/domain/NodeDomain.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/domain/NodeDomain.kt @@ -12,35 +12,42 @@ */ package elide.runtime.node.domain -import elide.annotations.Factory -import elide.annotations.Singleton import elide.runtime.gvm.api.Intrinsic import elide.runtime.gvm.internals.intrinsics.js.AbstractNodeBuiltinModule import elide.runtime.gvm.js.JsSymbol.JsSymbols.asJsSymbol +import elide.runtime.gvm.loader.ModuleInfo +import elide.runtime.gvm.loader.ModuleRegistry +import elide.runtime.interop.ReadOnlyProxyObject import elide.runtime.intrinsics.GuestIntrinsic.MutableIntrinsicBindings import elide.runtime.intrinsics.js.node.DomainAPI +import elide.runtime.lang.javascript.NodeModuleName // Internal symbol where the Node built-in module is installed. -private const val DOMAIN_MODULE_SYMBOL = "node_domain" +private const val DOMAIN_MODULE_SYMBOL = "node_${NodeModuleName.DOMAIN}" // Installs the Node `domain` module into the intrinsic bindings. -@Intrinsic -@Factory internal class NodeDomainModule : AbstractNodeBuiltinModule() { - @Singleton internal fun provide(): DomainAPI = NodeDomain.obtain() +@Intrinsic internal class NodeDomainModule : AbstractNodeBuiltinModule() { + internal fun provide(): DomainAPI = NodeDomain.obtain() override fun install(bindings: MutableIntrinsicBindings) { bindings[DOMAIN_MODULE_SYMBOL.asJsSymbol()] = provide() + ModuleRegistry.deferred(ModuleInfo.of(NodeModuleName.DOMAIN)) { provide() } } } /** * # Node API: `domain` */ -internal class NodeDomain : DomainAPI { +internal class NodeDomain : ReadOnlyProxyObject, DomainAPI { // internal companion object { private val SINGLETON = NodeDomain() fun obtain(): NodeDomain = SINGLETON } + + // @TODO not yet implemented + + override fun getMemberKeys(): Array = emptyArray() + override fun getMember(key: String?): Any? = null } diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/os/NodeOperatingSystem.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/os/NodeOperatingSystem.kt index 09ca8fa65..0bc7d6959 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/os/NodeOperatingSystem.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/os/NodeOperatingSystem.kt @@ -199,10 +199,11 @@ private val moduleMembers = arrayOf( override fun install(bindings: MutableIntrinsicBindings) { bindings[NODE_OS_SYMBOL.asJsSymbol()] = NodeOperatingSystem.obtain() - } - init { - ModuleRegistry.deferred(ModuleInfo.of(NODE_OS_NAME)) { NodeOperatingSystem.obtain() } + ModuleRegistry.deferred(ModuleInfo.of(NODE_OS_NAME)) { + ChildProcessNative.initialize() + NodeOperatingSystem.obtain() + } } } diff --git a/packages/graalvm/src/main/kotlin/elide/runtime/node/path/NodePaths.kt b/packages/graalvm/src/main/kotlin/elide/runtime/node/path/NodePaths.kt index 5e418ef75..da7283171 100644 --- a/packages/graalvm/src/main/kotlin/elide/runtime/node/path/NodePaths.kt +++ b/packages/graalvm/src/main/kotlin/elide/runtime/node/path/NodePaths.kt @@ -29,6 +29,7 @@ import elide.runtime.intrinsics.GuestIntrinsic.MutableIntrinsicBindings import elide.runtime.intrinsics.js.node.PathAPI import elide.runtime.intrinsics.js.node.path.Path import elide.runtime.intrinsics.js.node.path.PathFactory +import elide.runtime.lang.javascript.NodeModuleName import elide.runtime.lang.javascript.SyntheticJSModule import elide.runtime.node.path.NodePaths.SYMBOL import elide.runtime.node.path.PathStyle.POSIX @@ -154,7 +155,7 @@ public class PathBuf private constructor( @JvmStatic override fun from(first: String, vararg rest: String): Path = PathBuf(defaultStyle, KotlinPath(first, *rest)) - @JvmStatic override fun from(path: java.nio.file.Path): Path = + @JvmStatic override fun from(path: JavaPath): Path = PathBuf(defaultStyle, KotlinPath(path.toString())) @JvmStatic override fun from(path: File): Path = @@ -240,23 +241,15 @@ public class PathBuf private constructor( } // Installs the Node paths module into the intrinsic bindings. -@Intrinsic @Factory internal class NodePathsModule : SyntheticJSModule, AbstractNodeBuiltinModule() { - companion object { - // Singleton instance. - private val instance = NodePaths.create() +@Intrinsic internal class NodePathsModule : SyntheticJSModule, AbstractNodeBuiltinModule() { + val paths: PathAPI get() = NodePaths.create() - init { - ModuleRegistry.deferred(ModuleInfo.of("path")) { instance } - } - } - - val paths: PathAPI get() = instance + override fun provide(): PathAPI = paths override fun install(bindings: MutableIntrinsicBindings) { - bindings[SYMBOL.asJsSymbol()] = NodePaths.create() + bindings[SYMBOL.asJsSymbol()] = provide() + ModuleRegistry.deferred(ModuleInfo.of(NodeModuleName.PATH)) { provide() } } - - @Singleton override fun provide(): PathAPI = instance } /** diff --git a/packages/graalvm/src/test/kotlin/elide/runtime/gvm/internals/js/AbstractJsIntrinsicTest.kt b/packages/graalvm/src/test/kotlin/elide/runtime/gvm/internals/js/AbstractJsIntrinsicTest.kt index 8210a1216..abd410007 100644 --- a/packages/graalvm/src/test/kotlin/elide/runtime/gvm/internals/js/AbstractJsIntrinsicTest.kt +++ b/packages/graalvm/src/test/kotlin/elide/runtime/gvm/internals/js/AbstractJsIntrinsicTest.kt @@ -101,9 +101,7 @@ internal abstract class AbstractJsIntrinsicTest( Base64Intrinsic().install(binding) } if (bindBuffer && !target.any { it.key.symbol.contains("Buffer") }) { - NodeBufferModule().apply { - facade = NodeBufferModuleFacade() - }.install(binding) + NodeBufferModule().install(binding) } target } else { diff --git a/packages/graalvm/src/test/kotlin/elide/runtime/gvm/js/AbstractJsTest.kt b/packages/graalvm/src/test/kotlin/elide/runtime/gvm/js/AbstractJsTest.kt index ba89e3963..d501344c4 100644 --- a/packages/graalvm/src/test/kotlin/elide/runtime/gvm/js/AbstractJsTest.kt +++ b/packages/graalvm/src/test/kotlin/elide/runtime/gvm/js/AbstractJsTest.kt @@ -96,7 +96,7 @@ internal abstract class AbstractJsTest : AbstractDualTest() { // install utility bindings, if directed if (bindUtils) { target.putMember("test", AbstractJsIntrinsicTest.CaptureAssertion()) - target.putMember("Buffer", NodeBufferClass()) + target.putMember("Buffer", NodeBufferClass.obtain()) } // prep for execution diff --git a/packages/graalvm/src/test/kotlin/elide/runtime/node/AbstractJsModuleTest.kt b/packages/graalvm/src/test/kotlin/elide/runtime/node/AbstractJsModuleTest.kt index 8fb0e0737..5517725b9 100644 --- a/packages/graalvm/src/test/kotlin/elide/runtime/node/AbstractJsModuleTest.kt +++ b/packages/graalvm/src/test/kotlin/elide/runtime/node/AbstractJsModuleTest.kt @@ -88,9 +88,7 @@ internal abstract class AbstractJsModuleTest : AbstractJsInt NodeAssertStrictModule().install(binding) } if (bindBuffer && !group.any { it.key.symbol.contains("buffer") }) { - NodeBufferModule().apply { - facade = NodeBufferModuleFacade() - }.install(binding) + NodeBufferModule().install(binding) } group } else { diff --git a/packages/graalvm/src/test/kotlin/elide/runtime/node/NodeAssertTest.kt b/packages/graalvm/src/test/kotlin/elide/runtime/node/NodeAssertTest.kt index 78367df4e..f903e7c94 100644 --- a/packages/graalvm/src/test/kotlin/elide/runtime/node/NodeAssertTest.kt +++ b/packages/graalvm/src/test/kotlin/elide/runtime/node/NodeAssertTest.kt @@ -26,19 +26,16 @@ import java.math.BigInteger import java.util.stream.Stream import kotlin.streams.asStream import kotlin.test.Test -import kotlin.test.assertNotNull -import elide.annotations.Inject import elide.runtime.core.DelicateElideApi -import elide.runtime.intrinsics.js.node.AssertAPI import elide.runtime.node.asserts.NodeAssertModule import elide.runtime.node.asserts.NodeAssertionError import elide.testing.annotations.TestCase /** Tests for the built-in `assert` module. */ -@TestCase internal class NodeAssertTest @Inject constructor(internal val assert: AssertAPI) : - NodeModuleConformanceTest() { +@TestCase internal class NodeAssertTest : NodeModuleConformanceTest() { override val moduleName: String get() = "assert" override fun provide(): NodeAssertModule = NodeAssertModule() + private val assert = NodeAssertModule().provide() override fun expectCompliance(): Boolean = false diff --git a/packages/graalvm/src/test/kotlin/elide/runtime/node/NodeBufferTest.kt b/packages/graalvm/src/test/kotlin/elide/runtime/node/NodeBufferTest.kt index 698f757ed..45b04733a 100644 --- a/packages/graalvm/src/test/kotlin/elide/runtime/node/NodeBufferTest.kt +++ b/packages/graalvm/src/test/kotlin/elide/runtime/node/NodeBufferTest.kt @@ -18,21 +18,21 @@ import java.util.* import kotlin.test.Ignore import kotlin.test.assertEquals import kotlin.test.assertNotNull -import elide.annotations.Inject import elide.runtime.core.DelicateElideApi import elide.runtime.intrinsics.js.node.BufferAPI import elide.runtime.node.buffer.NodeBlob import elide.runtime.node.buffer.NodeBufferModule +import elide.runtime.node.buffer.NodeBufferModuleFacade import elide.testing.annotations.Test import elide.testing.annotations.TestCase -/** Tests for [Buffer]. */ +/** Tests for `Buffer`. */ @DelicateElideApi @TestCase -@Suppress("LargeClass") +@Suppress("LargeClass", "NodeCoreCodingAssistance") internal class NodeBufferTest : NodeModuleConformanceTest() { - @Inject internal lateinit var buffer: BufferAPI - @Inject internal lateinit var module: NodeBufferModule + internal val module: NodeBufferModule = NodeBufferModule() + internal val buffer: BufferAPI = NodeBufferModuleFacade() override val moduleName: String get() = "buffer" override fun provide(): NodeBufferModule = module @@ -458,11 +458,12 @@ internal class NodeBufferTest : NodeModuleConformanceTest() { @Test @Suppress("LongMethod") fun `Buffer (instance members)`() = conforms { - + // no-op }.guest { + // language=JavaScript """ const assert = require("node:assert"); - const { Buffer} = require("node:buffer"); + const { Buffer } = require("node:buffer"); // helper for assertions function assertContents(actual, expected) { diff --git a/runtime b/runtime index e96057db1..360fe2033 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit e96057db1b3cb7b4178e68ceff1c0343ba6b16b3 +Subproject commit 360fe20332901a06bea6468cf81278ed8f0dea6d