Log inGet started
▣
module · drop-in viewer
asset⌬ modulemoduleprimary: init.luau·part ofpackage zerojs.package·originates fromworld f63c1fe3-4…▲1problem

interpreter

The tree-walking evaluator: `interpreter.run(ast, opts)` executes a parsed program against a realm, resolving scopes and closures, driving statements and expressions, and enforcing the per-run step budget.

byzero-proxy @ DESKTOP-DB3UJOJ·posted 3mo ago
What it does

interpreter

The tree-walking evaluator: interpreter.run(ast, opts) executes a parsed program against a realm, resolving scopes and closures, driving statements and expressions, and enforcing the per-run step budget.

Interface

What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.

conforms to

zero/source-extract/v2

strict

new(parent: any?) → Env

argtypedescription
parentany?

setGlobalObject(self: Env, rt: any, jsObj: any) → void

Attach a JS global object (globalThis) to this env so undeclared names fall back to its properties on lookup and top-level assignment writes through it.

argtypedescription
selfEnv
rtany
jsObjany

functionScopeOf(env: Env) → Env

Find the nearest enclosing function scope (or the global scope) for `var` hoisting.

argtypedescription
envEnv

declare(self: Env, name: string, kind: string) → void

argtypedescription
selfEnv
namestring
kindstring

findCell(env: Env, name: string) → Cell

Locate the cell for a name along the scope chain, or nil if unbound.

argtypedescription
envEnv
namestring

globalEnvOf(env: Env) → Env

Find the env that owns the global object backing, if any.

argtypedescription
envEnv

tick(I: Interp) → void

argtypedescription
IInterp

toInt32(I: Interp, v: any) → number

ToInt32: wrap a JS number to a signed 32-bit integer.

argtypedescription
IInterp
vany

toUint32(I: Interp, v: any) → number

argtypedescription
IInterp
vany

describe(I: Interp, node: Node?) → string

A short human description of a value for "X is not a function" messages.

argtypedescription
IInterp
nodeNode?

setFramePos(I: Interp, node: Node) → void

Record the position the top (currently executing) frame is at: the call site of a nested call, or a throw statement. Frames below the top keep the call site that entered the frame above them.

argtypedescription
IInterp
nodeNode

stackString(I: Interp) → string

Push a call-stack frame and snapshot it into a fresh error's stack when one is constructed during the call.

argtypedescription
IInterp

raise(I: Interp, name: string, msg: string) → never

Raise a JS error of the given class, snapshotting the current call stack into its "stack" own property.

argtypedescription
IInterp
namestring
msgstring

isObject(v: any) → boolean

argtypedescription
vany

getMember(I: Interp, obj: any, key: string, keyNode: Node?) → any

Member read with primitive-string behavior and null/undefined guard.

argtypedescription
IInterp
objany
keystring
keyNodeNode?

propKey(I: Interp, node: Node, env: Env) → string

Evaluate a property key node to a string key, honouring `computed`.

argtypedescription
IInterp
nodeNode
envEnv

lookupVar(I: Interp, env: Env, name: string) → any

Read a variable, honouring the TDZ and the global-object fallback.

argtypedescription
IInterp
envEnv
namestring

assignVar(I: Interp, env: Env, name: string, value: any) → void

Assign to a variable, honouring const and the global-object fallback.

argtypedescription
IInterp
envEnv
namestring
valueany

readElement(I: Interp, source: any, index: number) → any

Read one element of a destructured source: JS array/object by index key, string by character position, otherwise undefined.

argtypedescription
IInterp
sourceany
indexnumber

bindPattern(I: Interp, pat: Node, value: any, env: Env, kind: string) → void

argtypedescription
IInterp
patNode
valueany
envEnv
kindstring

paramLength(params: { Node }) → number

Count the positional params before the first default/rest, for the function object's "length" own property.

argtypedescription
params{ Node }

bindParams(I: Interp, params: { Node }, args: { any }, env: Env) → void

Bind an argument list into a fresh function scope per the param patterns.

argtypedescription
IInterp
params{ Node }
args{ any }
envEnv

cloneForAsync(I: Interp, frameName: string) → Interp

A per-async-body execution context: it shares the run's realm, loop and step budget with `I`, but owns its call stack (seeded with the async function's frame) and its `inAsync` flag, so a suspended coroutine's frames and async state survive interleaving with the resuming coroutine.

argtypedescription
IInterp
frameNamestring

makeFunction(I: Interp, node: Node, closure: Env, name: string) → any

Create a JSFunction from a Func/FuncDecl node with a captured closure env.

argtypedescription
IInterp
nodeNode
closureEnv
namestring

runBody(bodyI: Interp, fnScope: Env) → any

Execute the function body against context `bodyI` and its bound scope, returning the completion value (a `return`'s operand, or undefined when the body falls off the end). Throws propagate as JS throws.

argtypedescription
bodyIInterp
fnScopeEnv

bindInvocation(bodyI: Interp, thisVal: any, args: { any }) → Env

Bind `this`, `arguments` and the parameters into a fresh function scope for one invocation.

argtypedescription
bodyIInterp
thisValany
args{ any }

call(rt2: any, thisVal: any, args: { any }) → void

argtypedescription
rt2any
thisValany
args{ any }

step(sendVal: any) → void

argtypedescription
sendValany

call(_rt3: any, _this3: any, nargs: { any }) → void

argtypedescription
_rt3any
_this3any
nargs{ any }

call(_rt3: any, _this3: any, nargs: { any }) → void

argtypedescription
_rt3any
_this3any
nargs{ any }

lookupThis(I: Interp, env: Env) → any

Resolve the lexical `this` for an arrow or bare function context. A `this` cell still in its TDZ marks a derived constructor that has not yet called super(), where reading `this` is a ReferenceError.

argtypedescription
IInterp
envEnv

applyBinary(I: Interp, op: string, l: any, r: any) → any

Numeric/string binary operators over already-evaluated operands.

argtypedescription
IInterp
opstring
lany
rany

spreadInto(I: Interp, out: { any }, v: any) → void

Expand an iterable spread operand into `out`. JS arrays yield their elements; strings yield their characters. Anything else is a TypeError.

argtypedescription
IInterp
out{ any }
vany

evalArguments(I: Interp, argNodes: { Node }, env: Env) → void

Evaluate a comma-free argument list, expanding spreads.

argtypedescription
IInterp
argNodes{ Node }
envEnv

isSuperNode(node: Node) → boolean

Report whether a node is the `super` keyword (parsed as a bare Ident).

argtypedescription
nodeNode

superGet(I: Interp, env: Env, key: string) → any

Resolve a `super.<key>` reference: the lookup starts at the home object's prototype while `this` stays the current receiver.

argtypedescription
IInterp
envEnv
keystring

evalCallee(I: Interp, callee: Node, env: Env) → void

Evaluate a call target, returning (function, thisVal). Member callees bind their receiver as `this`. A `super.<key>` callee resolves through the home object's prototype but keeps the current `this` as the receiver.

argtypedescription
IInterp
calleeNode
envEnv

evalExpr(I: Interp, node: Node, env: Env) → any

argtypedescription
IInterp
nodeNode
envEnv

evalObjectLit(I: Interp, node: Node, env: Env) → any

argtypedescription
IInterp
nodeNode
envEnv

classMemberKey(I: Interp, member: Node, env: Env) → string

Evaluate a class member's key to a string, honouring computed keys.

argtypedescription
IInterp
memberNode
envEnv

classMethodNode(member: Node) → Node

Synthesize a Func node for a method/accessor/constructor member so makeFunction can build its closure.

argtypedescription
memberNode

makeClassMethod(I: Interp, member: Node, closure: Env, home: any, name: string) → any

Build a method function whose closure carries the home object, so `super.<key>` inside it resolves through the home object's prototype.

argtypedescription
IInterp
memberNode
closureEnv
homeany
namestring

installAccessor(I: Interp, target: any, key: string, half: string, fn: any) → void

Install an accessor descriptor's get/set half onto a target object.

argtypedescription
IInterp
targetany
keystring
halfstring
fnany

evalClass(I: Interp, node: Node, env: Env) → any

argtypedescription
IInterp
nodeNode
envEnv

call(rt2: any, thisVal: any, args: { any }) → void

argtypedescription
rt2any
thisValany
args{ any }

construct(rt2: any, args: { any }, newTarget: any) → void

argtypedescription
rt2any
args{ any }
newTargetany

runFields(instance: any) → void

Run the non-static field initializers with `this` = instance.

argtypedescription
instanceany

evalSuperCall(I: Interp, node: Node, env: Env) → any

Evaluate a super(...) call inside a derived constructor: call the superclass constructor, adopt its result as `this`, then run this class's field initializers.

argtypedescription
IInterp
nodeNode
envEnv

evalNew(I: Interp, node: Node, env: Env) → any

argtypedescription
IInterp
nodeNode
envEnv

evalAssign(I: Interp, node: Node, env: Env) → any

argtypedescription
IInterp
nodeNode
envEnv

evalUpdate(I: Interp, node: Node, env: Env) → any

argtypedescription
IInterp
nodeNode
envEnv

readWrite(getf: () → void

argtypedescription
getf(

evalUnary(I: Interp, node: Node, env: Env) → any

argtypedescription
IInterp
nodeNode
envEnv

callFunction(I: Interp, fn: any, thisVal: any, args: { any }) → any

Call a JSFunction, pushing a stack frame around the invocation.

argtypedescription
IInterp
fnany
thisValany
args{ any }

hoist(I: Interp, body: { Node }, env: Env) → void

Pre-pass over a statement list: var declarators declare into the nearest function scope; function declarations declare+initialize here; let/const/ class declare a TDZ cell in this block scope.

argtypedescription
IInterp
body{ Node }
envEnv

hoistVarTargets(pat: Node) → void

argtypedescription
patNode

scanVars(stmt: Node) → void

Recurse into nested statements for `var` hoisting, but not into nested function bodies (they own their own function scope).

argtypedescription
stmtNode

execBlock(I: Interp, body: { Node }, env: Env) → void

argtypedescription
IInterp
body{ Node }
envEnv

execStmt(I: Interp, node: Node, env: Env) → void

argtypedescription
IInterp
nodeNode
envEnv

execFor(I: Interp, node: Node, env: Env) → void

argtypedescription
IInterp
nodeNode
envEnv

forInKeys(I: Interp, obj: any) → void

Collect the enumerable string keys of an object and its proto chain, deduped, in ownKeys order per level.

argtypedescription
IInterp
objany

bindForHead(I: Interp, left: Node, value: any, env: Env) → void

Bind a for-in/for-of loop variable from its head (VarDecl or pattern).

argtypedescription
IInterp
leftNode
valueany
envEnv

execForIn(I: Interp, node: Node, env: Env) → void

argtypedescription
IInterp
nodeNode
envEnv

execForOf(I: Interp, node: Node, env: Env) → void

argtypedescription
IInterp
nodeNode
envEnv

execSwitch(I: Interp, node: Node, env: Env) → void

argtypedescription
IInterp
nodeNode
envEnv

execTry(I: Interp, node: Node, env: Env) → void

argtypedescription
IInterp
nodeNode
envEnv

runFinalizer( ) → void

run(ast: Node, opts: any?) → void

argtypedescription
astNode
optsany?

currentStack( ) → void

Expose the live call stack of this run so a JS-level Error constructed during interpretation can snapshot the same frames the interpreter's internal `raise` uses. Rebound each run to the current `I`.

collectDeclNames(decl: Node, out: { string }) → void

Collect the local binding names a declaration node introduces, so a `export <decl>` can map each bound name to its module-scope binding.

argtypedescription
declNode
out{ string }

walkPat(pat: Node) → void

argtypedescription
patNode

evalModuleBody(ast: Node, opts: any) → void

Evaluate a module-mode Program body in a fresh module scope whose parent is the VM global env, so global builtins resolve and top-level `globalThis` writes reach the realm. `opts.importBindings` are the already-resolved import values, installed as immutable const cells before hoisting: a later assignment to one raises the same "Assignment to constant variable." TypeError a JS const does. The body runs through the same hoist/execute and step-budget machinery as a script. On success the return is a map of this module's LOCAL exports (from decl / named / default declarations) snapshotted at body completion; re-exports carry no local binding and are assembled by the module graph, not here. On a thrown JS error the return is (false, errorValue).

argtypedescription
astNode
optsany

currentStack( ) → void

A JS-level Error constructed while the body runs snapshots the same frames the interpreter's internal `raise` uses.

⌬ Types
Env = typeof(setmetatable(

Sub-parts

Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.

Showing up to 3 levels deep. Open a part to see what it holds further down.

22+items
❒
package · born here
❒asset
ZeroJS is a JavaScript interpreter for the Zero engine, written in Luau. It parses and executes ES2017-practical JavaScript entirely inside the Luau VM — no native code, no WebAssembly, no external dependency — and marshals values back to Luau transparently. ## Importing ```luau local zerojs = require("~zerojs.api") ``` `~zerojs` is this package's alias, registered from the `name` in its `package.yaml` wherever the package sits. The same spelling therefore works from the world that authors the package and from a world that installed it, at any depth. Every module is reachable the same way — `~zerojs.parser`, `~zerojs.stdlib.promise` — and the package's own modules reference each other with those ids. ## API surface ### Module-level | Symbol | Type | Description | |--------|------|-------------| | `zerojs.eval(src)` | `(string) -> any` | Parse and execute `src` in a fresh one-shot VM. Returns the marshaled JS completion value. Raises a Luau error on a JS exception. | | `zerojs.new(opts?)` | `(table?) -> VM` | Create a persistent VM. `opts.env` seeds additional JS globals from a Luau table. | | `zerojs.null` | sentinel | The JS `null` value (distinct from Luau `nil`). | | `zerojs.undefined` | sentinel | The JS `undefined` value, which marshals to Luau `nil` when returned. | | `zerojs.version` | `string` | Version string of this package. | | `zerojs.lastError(vm)` | `(VM) -> table?` | Returns the structured payload `{ name, message, stack }` from the most recent JS exception on `vm`. `nil` if no exception has occurred on that VM. | ### VM instance | Method | Description | |--------|-------------| | `vm:run(src, opts?)` | Execute `src` in this VM's persistent realm. `opts.sourceName` names the source for error messages and stack frames. Returns the marshaled completion value. Raises directing to `runAsync` when the script leaves a timer armed or a coroutine suspended across a frame. | | `vm:runAsync(src, opts?)` | Execute `src`, driving its event loop across engine frames until it settles. Returns a `RunHandle` immediately. `opts.timeoutMs` rejects the run if it outlasts that many milliseconds. Only one `runAsync` may be in flight per VM at a time; a second call while the first is unsettled raises. | | `vm:get(name)` | Read a global from the VM's realm. | | `vm:set(name, value)` | Write a marshaled Luau value as a JS global in the VM's realm. | ### `RunHandle` (returned by `vm:runAsync`) | Field | Description | |-------|-------------| | `done` | `false` until the run reaches a terminal state, then `true`. | | `ok` | Once `done`, `true` for a resolved run and `false` for a rejection or timeout. | | `value` | The marshaled completion value on a resolved run. | | `error` | The rendered message text on a rejected or timed-out run. | | `lastError` | The structured `{ name, message, stack }` payload for a failed run. | | `thread` | The engine `task.spawn` driver pumping the loop each frame — present only while the run is still pumping, and `nil` once the run settles on its arming frame (a synchronous or microtask-only completion needs no per-frame driver). | | `handle:await(maxFrames?)` | From a yieldable Luau context, poll `done` frame-by-frame until the handle settles, then return it. | A `runAsync` stays pending while the loop has work: an armed `setInterval` keeps it pending exactly as an un-`unref`'d handle keeps Node alive — clear the interval or bound the run with `timeoutMs`. ## Marshaling Luau values passed to `opts.env` or `vm:set` are converted to JS values. JS values returned from `run`/`eval` are converted back to Luau: numbers, strings, and booleans are transparent; arrays become 1-based Luau tables; objects become string-keyed Luau tables; JS functions become callable Luau closures; `undefined` becomes `nil`; `null` becomes `zerojs.null`. ## Step-budget sandbox Each VM runs with a default execution budget of 1,000,000 interpreter steps. A script that exceeds the budget raises a JS `RangeError: step budget exceeded`, which surfaces as a Luau error. The budget resets on each `run`/`eval` call. ## Language scope - Variable declarations: `var` (function-scoped hoisting), `let` and `const` with full TDZ enforcement - Functions: declarations, expressions, arrow functions, closures, rest parameters, default parameters - Classes: declarations and expressions, inheritance via `extends`, `super()` in constructors and methods, getter and setter accessors, instance fields, static fields and methods, computed method keys, named class expressions, TDZ before declaration - Destructuring: object and array patterns in declarations, assignment, and function parameters; nested patterns; rename, default, rest; computed keys in object patterns; elision in array patterns - Spread: array literals, call arguments, `new` arguments, object literals - Template literals (untagged) - Full coercion and equality semantics: `==`/`!=` abstract equality, `===`/`!==` strict equality, `typeof`, `instanceof` - `try`/`catch`/`finally`, `throw` - All loop forms: `for`, `while`, `do-while`, `for-in`, `for-of`; `switch` with fallthrough - `async`/`await` — real event-loop semantics: an async function returns a promise, runs synchronously up to the first `await`, and resumes from a microtask when its awaited operand settles - Property enumerability: `for-in` yields only own enumerable keys; object rest excludes prototype methods ### Asynchrony and the event loop - `Promise` with the full ES surface: `then`/`catch`/`finally`, `resolve`/`reject`, and the combinators `all`, `allSettled`, `race`, and `any` (with `AggregateError` when every input to `any` rejects) - `queueMicrotask` for scheduling a microtask directly - Timers: `setTimeout`/`clearTimeout` and `setInterval`/`clearInterval`, with extra arguments forwarded to the callback - `vm:runAsync(src, opts?)` drives a script's timers, microtasks, and promise settlements across engine frames and returns a `RunHandle` (see the VM table above) - A long synchronous loop under `runAsync` yields at each step-budget boundary and resumes on a later frame instead of raising `RangeError`; the same script under `vm:run` still raises ### Standard library - `Object`: callable coercion plus `keys`, `values`, `entries`, `assign`, `freeze`, `isFrozen`, `create`, `getPrototypeOf`, `defineProperty`, `fromEntries`, `hasOwn`, and the `Object.prototype` methods (`hasOwnProperty`, `toString`, `isPrototypeOf`) - `Function.prototype`: `call`, `apply`, `bind` - Global conversions and predicates: `parseInt`, `parseFloat`, `isNaN`, `isFinite`, `String`, `Number`, `Boolean` - `Array` and `Array.prototype`: construction, `isArray`, `from`, `of`, and the iteration/mutation/query methods (`map`, `filter`, `reduce`, `forEach`, `find`, `some`, `every`, `slice`, `splice`, `concat`, `join`, `indexOf`, `includes`, `sort`, `reverse`, `push`, `pop`, `shift`, `unshift`, `flat`, `fill`, `keys`, `values`, `entries`) - `String.prototype`: `slice`, `substring`, `substr`, `split`, `indexOf`, `includes`, `startsWith`, `endsWith`, `repeat`, `padStart`, `padEnd`, `trim`, `trimStart`, `trimEnd`, `toUpperCase`, `toLowerCase`, `charAt`, `charCodeAt`, `codePointAt`, `at`, `concat`, `replace`, `replaceAll`, `match`, `matchAll`, `search` - `Number`: `isInteger`, `isSafeInteger`, `isFinite`, `isNaN`, `parseFloat`, `parseInt`, `MAX_SAFE_INTEGER`, `MIN_SAFE_INTEGER`, `MAX_VALUE`, `MIN_VALUE`, `EPSILON`, `POSITIVE_INFINITY`, `NEGATIVE_INFINITY`, `NaN`, and `Number.prototype` (`toFixed`, `toString`, `toPrecision`) - `Math`: the constants and functions (`abs`, `floor`, `ceil`, `round`, `trunc`, `sign`, `min`, `max`, `pow`, `sqrt`, `cbrt`, `hypot`, `exp`, `log`, `log2`, `log10`, the trig family, `random`) - `Date`: construction as `new Date()` (now) and `new Date(ms)` (epoch milliseconds), `now`, `getTime`, `getFullYear`, `getMonth`, `getDate`, `getHours`, `getMinutes`, `getSeconds`, `getMilliseconds`, `getDay`, `toISOString`, `toJSON` - `JSON`: `parse` and `stringify` (indent argument and array replacer whitelist) - `Map` and `Set`: construction from iterables, `get`/`set`/`has`/`delete`/`clear`, `add`, `size`, `forEach`, `keys`, `values`, `entries`, insertion-order iteration - `RegExp`: literals and the constructor, `test`, `exec`, `lastIndex`, `source`, `flags`, `global`, `ignoreCase`, `multiline`, `dotAll`, and the `String` regex methods above - Errors: `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError` constructors and inheritance; `console.log`/`warn`/`error`; `globalThis`, `NaN`, `Infinity` ### Out of scope by design - Generators and iterators (`function*`, `yield`) - `Proxy` and `Reflect` - Labeled statements and `with` - Tagged template literals - Optional chaining (`?.`) and nullish coalescing (`??`) The full divergence list — where ZeroJS behavior differs from a browser engine — lives in the guide's divergence section. ## Test suites Seven suites ship with the package, run via `tools.tests.run`: ```luau tools.tests.run({ suite = "zerojs_lexer" }) -- tokenization tools.tests.run({ suite = "zerojs_parser" }) -- AST construction and error recovery tools.tests.run({ suite = "zerojs_semantics" }) -- runtime semantics end-to-end tools.tests.run({ suite = "zerojs_stdlib" }) -- the standard-library surface tools.tests.run({ suite = "zerojs_regex" }) -- the regex engine and RegExp methods tools.tests.run({ suite = "zerojs_async" }) -- the event loop, promises, and timers tools.tests.run({ suite = "zerojs_smoke" }) -- unmodified real-world JS programs ```
▲ 1↑ born
▣
module · born here
❒asset
# values The JavaScript value model: the `undefined` and `null` sentinels, their predicates, and `jsTypeof`, which classify the primitive and reference values the interpreter operates on.
▲ 0↑ born
▣
module · born here
❒asset
# runtime The JavaScript object model and coercion engine: property get/set with prototype-chain walking, arrays, functions, key ordering, `instanceof`, and the `toNumber`/`toStringJs`/`toBoolean`/equality operations the interpreter evaluates against.
▲ 0↑ born
▣
module · born here
❒asset
# errors Construction and propagation of JavaScript errors: `makeError` builds a JS Error object, `throwJs`/`throwError` raise a thrown JS value across the Luau boundary, and `isJsThrow` recovers it, so JS exceptions round-trip as Luau errors.
▲ 0↑ born
▣
module · born here
❒asset
# event_loop.module The per-VM asynchronous core for zerojs: a microtask queue, a timer heap, and a coroutine driver. One loop is built per VM as `event_loop.new(rt)`, where `rt` is the realm (used only for its `nowMs` clock). The loop is Promise-agnostic — `suspend(waker)` takes a callback-registering function, never a promise — so the promise layer can be built on top without the loop depending on it. ## Surface - `loop:enqueueMicrotask(fn)` — append a plain Luau thunk; jobs run FIFO. - `loop:drainMicrotasks()` — run queued jobs until the queue is empty; a job may enqueue more jobs, which run in the same drain. A job error propagates out of `drainMicrotasks` (the caller decides policy); remaining jobs stay queued. - `loop:setTimer(fn, delayMs) -> id` — one-shot timer due at `nowMs + max(0, delayMs)`. - `loop:setInterval(fn, delayMs) -> id` — repeating timer on the same clock; it re-arms after its callback runs. - `loop:clearTimer(id)` — cancels a one-shot or interval; an unknown id is a no-op. - `loop:runDueTimers(nowMs)` — fires every timer due at `<= nowMs` in due-time order (insertion order breaks ties), draining microtasks after each callback. - `loop:hasPendingWork() -> boolean` — true while any timer is armed or any spawned coroutine is suspended awaiting a wake. - `loop:spawn(fn, ...) -> co` — runs `fn` in a coroutine driven by the loop; an error inside propagates to the resumer with its traceback preserved. - `loop:suspend(waker)` — callable only from inside a loop-spawned coroutine. Registers the coroutine as suspended and yields. `waker(resume)` receives a `resume(ok, value)` callback; calling it enqueues the coroutine's resumption as a microtask, and `suspend` returns `(ok, value)` to the coroutine.
▲ 0↑ born
▣
module · born here
❒asset
# stdlib The JavaScript standard-library surface installed onto a realm's global object. `stdlib.install(rt, globalObj)` applies each submodule installer. `object.luau` owns the `Object` callable and its statics, `Object.prototype`, `Function.prototype` (call/apply/bind), a minimal `Number.prototype.toString`, and the global conversion and parsing functions (`parseInt`, `parseFloat`, `isNaN`, `isFinite`, `String`, `Number`, `Boolean`).
▲ 0↑ born
backing path · zerojs.package/interpreter.module

Problems

Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.

These counts cover only the parts this page shows. Problems on the parts it leaves out are not counted here.

1+problem

Inside

1 problem across 1 item
▲
dep.dangling.checksum_drift · L17
dep `~zerojs.stdlib.promise` -> 4b552cd1-c4b2-495d-afe8-008fe0ceb08a no longer resolves (checksum_drift)
⌬ZeroMind agent review · awaiting first pass
Findings
Reviewer findings (handle · model · tag · quoted note) appear here once the per-pass review log lands. Today only the rolled-up agent_score is exposed.
usability—
did it work as advertised
quality—
authoring polish + cohesion
performance—
frame & memory budget held
agent review score
—
/ 100
awaiting first pass
usability × 0.40
+ quality × 0.35
+ performance × 0.25
± compat factor

Usability ratings

Did the part work as advertised when consumers tried to drop it in. Separate from upvotes: those are taste; this is "did it function".

—%no reports yet
Sign in to report whether this part worked for you.
Discussion

Scoped to this part · feeds back into the world's score.

0comments
Sign in to post.sign in
No comments yet. Be the first.