diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2024-03-06 17:35:57 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-06 12:05:57 +0000 |
commit | d283a536551b879df2fa4709c5bca42e18b76d9f (patch) | |
tree | 35ae9cb41ea1344a41ee0f7785c6798c232aa813 | |
parent | fac7068c1efd53438576c07a539443fee818fd30 (diff) |
fix(node): implement ALS enterWith (#22740)
Fixes https://github.com/denoland/deno/issues/18127
https://github.com/denoland/deno/issues/17248
SvelteKit works now!
```
$ deno run -A npm:create-svelte@latest my-app
create-svelte version 6.0.9
┌ Welcome to SvelteKit!
│
◇ Which Svelte app template?
│ SvelteKit demo app
│
◇ Add type checking with TypeScript?
│ Yes, using JavaScript with JSDoc comments
│
◇ Select additional options (use arrow keys/space bar)
│ none
│
└ Your project is ready!
✔ Type-checked JavaScript
https://www.typescriptlang.org/tsconfig#checkJs
Install community-maintained integrations:
https://github.com/svelte-add/svelte-add
Next steps:
1: cd my-app
2: npm install
3: git init && git add -A && git commit -m "Initial commit" (optional)
4: npm run dev -- --open
To close the dev server, hit Ctrl-C
Stuck? Visit us at https://svelte.dev/chat
$ cd my-app/
$ deno task dev
Task dev vite dev
VITE v5.1.4 ready in 1632 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
➜ press h + enter to show help
```
-rw-r--r-- | ext/node/polyfills/async_hooks.ts | 8 | ||||
-rw-r--r-- | tests/unit_node/async_hooks_test.ts | 17 |
2 files changed, 25 insertions, 0 deletions
diff --git a/ext/node/polyfills/async_hooks.ts b/ext/node/polyfills/async_hooks.ts index e69bc88aa..d60334346 100644 --- a/ext/node/polyfills/async_hooks.ts +++ b/ext/node/polyfills/async_hooks.ts @@ -308,6 +308,14 @@ export class AsyncLocalStorage { const currentFrame = AsyncContextFrame.current(); return currentFrame.get(this.#key); } + + enterWith(store: unknown) { + const frame = AsyncContextFrame.create( + null, + new StorageEntry(this.#key, store), + ); + Scope.enter(frame); + } } export function executionAsyncId() { diff --git a/tests/unit_node/async_hooks_test.ts b/tests/unit_node/async_hooks_test.ts index 5457b4d19..076d14b54 100644 --- a/tests/unit_node/async_hooks_test.ts +++ b/tests/unit_node/async_hooks_test.ts @@ -77,3 +77,20 @@ Deno.test(async function nested() { assertEquals(await deferred.promise, { x: 1 }); assertEquals(await deferred1.promise, null); }); + +Deno.test(async function enterWith() { + const als = new AsyncLocalStorage(); + const deferred = Promise.withResolvers(); + const deferred1 = Promise.withResolvers(); + + als.run(null, () => { + als.run({ x: 1 }, () => { + als.enterWith({ x: 2 }); + deferred.resolve(als.getStore()); + }); + deferred1.resolve(als.getStore()); + }); + + assertEquals(await deferred.promise, { x: 2 }); + assertEquals(await deferred1.promise, { x: 1 }); +}); |