|
1 | 1 | <!-- See https://www.sanity.io/guides/server-side-rendering-deno-react --> |
2 | 2 |
|
| 3 | +<script src="https://cdn.jsdelivr.net/npm/react@17.0.2/umd/react.profiling.min.js"></script> |
| 4 | +<script src="https://cdn.jsdelivr.net/npm/react-dom@17.0.2/umd/react-dom.profiling.min.js"></script> |
| 5 | +<script src="https://cdn.jsdelivr.net/npm/react-dom@17.0.2/umd/react-dom-server.browser.production.min.js"></script> |
| 6 | + |
3 | 7 | <script src="https://unpkg.com/monaco-editor@latest/min/vs/loader.js"></script> |
4 | 8 |
|
| 9 | + |
| 10 | +<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" integrity="sha512-c3Nl8+7g4LMSTdrm621y7kf9v3SDPnhxLNhcjFJbKECVnmZHTdo+IRO05sNLTH/D3vA6u1X32ehoLC7WFVdheg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>--> |
| 11 | + |
5 | 12 | <script type="module"> |
| 13 | +//import React, { useReducer, useCallback, useEffect, useState, useMemo } from "https://jspm.dev/react@17.0.2"; |
| 14 | +//import ReactDOM from "https://jspm.dev/react-dom@17.0.2/profiling"; |
| 15 | +//import ReactDOMServer from "https://jspm.dev/react-dom@17.0.2/server"; |
| 16 | + |
| 17 | +console.log("react", window.React); |
| 18 | +//import ReactDOM from "https://cdn.jsdelivr.net/npm/react-dom@17.0.2/umd/react-dom.profiling.min.js/+esm"; |
| 19 | +//import "https://cdn.jsdelivr.net/npm/react-dom@17.0.2/umd/react-dom-server.browser.production.min.js"; |
| 20 | + |
6 | 21 | import * as esbuild from "https://cdn.jsdelivr.net/npm/esbuild-wasm@0.14.1/esm/browser.min.js"; |
7 | 22 | const esbuildPromise = Promise.resolve(esbuild.initialize({ |
8 | 23 | wasmURL: 'https://cdn.jsdelivr.net/npm/esbuild-wasm@0.14.1/esbuild.wasm', |
@@ -249,7 +264,9 @@ require(["vs/editor/editor.main"], function () { |
249 | 264 | bundle: true, |
250 | 265 | minify: true, |
251 | 266 | stdin: { |
252 | | - contents: `${prefix}\n${body ?? ""}\n${suffix}`, |
| 267 | + //contents: `${prefix}\n${body ?? ""}\n${suffix}`, |
| 268 | + contents: `${body ?? ""}\n${suffix}`, |
| 269 | + //contents: body ?? "", |
253 | 270 | loader: 'jsx', |
254 | 271 | sourcefile: 'main.jsx', |
255 | 272 | }, |
@@ -277,7 +294,11 @@ require(["vs/editor/editor.main"], function () { |
277 | 294 | }) |
278 | 295 | .then(({ code, codeBytes, duration }) => { |
279 | 296 | console.log("NEW CODE!"); |
280 | | - const executor = new Function(`${code}; return exports.Example();`); |
| 297 | + //window.useReducer = window.React.useReducer; |
| 298 | + //window.useMemo = window.React.useMemo; |
| 299 | + const hookNames = Object.keys(window.React).filter(name => name.startsWith('use')); |
| 300 | + const preamble = hookNames.map(hookName => `const ${hookName} = window.React.${hookName}`).join(';'); |
| 301 | + const executor = new Function(`${preamble}; ${code}; return exports.Example();`); |
281 | 302 | const result = executor(); |
282 | 303 | return new Map() |
283 | 304 | .set('result', result) |
@@ -326,7 +347,7 @@ require(["vs/editor/editor.main"], function () { |
326 | 347 | }, 1000); |
327 | 348 | } |
328 | 349 |
|
329 | | - reactRenderEl.textContent = `last ${detail.actualDuration}ms; ${renderCount} times rendered`; |
| 350 | + reactRenderEl.textContent = `last ${detail.actualDuration.toFixed(1)}ms; ${renderCount} times rendered`; |
330 | 351 | }); |
331 | 352 | }); |
332 | 353 | </script> |
|
0 commit comments