with with
A simple way to use the JavaScript with
statement in strict mode!
This is not a sandbox do not use it as a sandbox do not try to make it a sandbox. We will try this and fail so you don't have to.
Installation
Node/Bun
pnpm install with-with
Deno
import withWith from "https://deno.land/x/with/mod.ts";
QuickJS
Cry.
Usage
let accessible = false;
const returnValue = withWith(
{ hello: "there" },
({ hello }) => {
// You can get types via destructuring like `() => ({ hello, etc }) =>`.
// Logs `there`.
console.log("hello", hello);
// Variables from the parent scope are still accessible and can be mutated.
accessible = true;
// You can return as well and it will get passed back to the upper scope.
return hello;
},
// This lifter enables your with wrapped function to be able to access all variables from the parent scope.
{ lifter: (k) => eval(k) }
);
console.log(returnValue, accessible);
Binding
withWith(
{ hello: "there" },
function () {
console.log(this);
},
// No variables from the parent scope are accessed, so there's no need for a lifter.
{ binding: { on: "this" } }
);