Skip to content

Instantly share code, notes, and snippets.

View vscode-side-preview-extensions.tsx
import vscode from "vscode";
import path from "path";
export function activate(context: vscode.ExtensionContext) {
context.subscriptions.push(
vscode.Disposable.from(registerOpenCommand(context))
);
}
function openPreview(
View immer-and-weakref-failed.ts
import produce, { current } from "immer";
type Node = {
value: string;
children: Node[];
};
const tree: Node = {
value: "root",
children: [
View browser-gzip.ts
declare const DecompressionStream: any;
declare const CompressionStream: any;
const encoder = new TextEncoder();
const decoder = new TextDecoder();
async function compress(str: string): Promise<ArrayBuffer> {
const cs = new CompressionStream("gzip");
const buf = encoder.encode(str);
const stream = new Response(buf).body!.pipeThrough(cs);
return new Response(stream as any).arrayBuffer();
@mizchi
mizchi / portal-guest.html
Created Jun 4, 2021
portal communication
View portal-guest.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
</head>
<body style="height: 200vh">
<h1>portal guest</h1>
<script>
portalHost.postMessage("foo");
portalHost.onmessage = (ev) => {
View index.js
export function __test__({ test }) {
test("xxx", () => {
console.log("ok");
});
}
console.log("...");
View deno_code_reading_20210516.md

Deno の コードリーディング

動機

cloudflare worker, deno deploy 等で v8 isolates を前提にしたホスティングプラットフォームが増えている。これを自分で実装してみたいと思った。

denoland/rusty_v8 を読んだが、SnapshotCreator の使い方がよくわからなかった。これを deno 本体を読んで使い方を調べた。

ついでに、rusty_v8、というか v8 にはメインループやスケジューラが含まれていないので、 Tokio のメインループで、どのように deno が非同期メインループを実装しているか調べた。

View rusty_v8_minimum_snapshot.rs
use rusty_v8 as v8;
use std::mem::forget;
fn main() {
let platform = v8::new_default_platform().unwrap();
v8::V8::initialize_platform(platform);
v8::V8::initialize();
let snapshot;
// --- create snapshot ---
{
View how_to_use_deno_snapshot.rs
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
use deno_core::{JsRuntime, RuntimeOptions, Snapshot};
fn main() {
// create snapshot
let mut runtime = JsRuntime::new(RuntimeOptions {
will_snapshot: true,
..Default::default()
});
View context_store.ts
type EventBase = {
__uid?: string;
__ts?: number;
};
type PubSub<Event> = {
dispatch: (ev: Event) => void;
subscribe: (fn: (ev: Event) => void) => void;
};