From f6a77d89b78b2717bf8f5ae13fd3b9e446936fb8 Mon Sep 17 00:00:00 2001 From: softmarshmallow Date: Mon, 25 Jul 2022 16:22:03 +0900 Subject: [PATCH 01/34] init flutter build package --- .../editor-services-flutter-build/README.md | 6 ++++++ .../editor-services-flutter-build/package.json | 8 ++++++++ .../workers/flutter.worker.js | 14 ++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 editor-packages/editor-services-flutter-build/README.md create mode 100644 editor-packages/editor-services-flutter-build/package.json create mode 100644 editor-packages/editor-services-flutter-build/workers/flutter.worker.js diff --git a/editor-packages/editor-services-flutter-build/README.md b/editor-packages/editor-services-flutter-build/README.md new file mode 100644 index 00000000..6b0a4d13 --- /dev/null +++ b/editor-packages/editor-services-flutter-build/README.md @@ -0,0 +1,6 @@ +# flbuild - Flutter Build + +This package uses `@flutter-builder/build` package for building flutter app on a local machine. +This package only contains webworker scripts for editor io integrations. + +Learn more at [flutter-builder](https://github.com/gridaco/flutter-builder) diff --git a/editor-packages/editor-services-flutter-build/package.json b/editor-packages/editor-services-flutter-build/package.json new file mode 100644 index 00000000..33cb069b --- /dev/null +++ b/editor-packages/editor-services-flutter-build/package.json @@ -0,0 +1,8 @@ +{ + "name": "@code-editor/flutter-build", + "version": "0.0.0", + "private": false, + "description": "run flutter build command with webworker api", + "dependencies": {}, + "peerDependencies": {} +} \ No newline at end of file diff --git a/editor-packages/editor-services-flutter-build/workers/flutter.worker.js b/editor-packages/editor-services-flutter-build/workers/flutter.worker.js new file mode 100644 index 00000000..dd2e2fd2 --- /dev/null +++ b/editor-packages/editor-services-flutter-build/workers/flutter.worker.js @@ -0,0 +1,14 @@ +const { spawn } = require("node:child_process"); +const build = spawn("flutter", "build", ["--no-source-maps"]); + +build.stdout.on("data", (data) => { + console.log(`stdout: ${data}`); +}); + +build.stderr.on("data", (data) => { + console.error(`stderr: ${data}`); +}); + +build.on("close", (code) => { + console.log(`child process exited with code ${code}`); +}); From d2ae95944ea65138e7d9448fb5c343e52fe44fa1 Mon Sep 17 00:00:00 2001 From: softmarshmallow Date: Wed, 27 Jul 2022 12:24:51 +0900 Subject: [PATCH 02/34] rm flutter build worker pkg --- .../editor-services-flutter-build/README.md | 6 ------ .../editor-services-flutter-build/package.json | 8 -------- .../workers/flutter.worker.js | 14 -------------- 3 files changed, 28 deletions(-) delete mode 100644 editor-packages/editor-services-flutter-build/README.md delete mode 100644 editor-packages/editor-services-flutter-build/package.json delete mode 100644 editor-packages/editor-services-flutter-build/workers/flutter.worker.js diff --git a/editor-packages/editor-services-flutter-build/README.md b/editor-packages/editor-services-flutter-build/README.md deleted file mode 100644 index 6b0a4d13..00000000 --- a/editor-packages/editor-services-flutter-build/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# flbuild - Flutter Build - -This package uses `@flutter-builder/build` package for building flutter app on a local machine. -This package only contains webworker scripts for editor io integrations. - -Learn more at [flutter-builder](https://github.com/gridaco/flutter-builder) diff --git a/editor-packages/editor-services-flutter-build/package.json b/editor-packages/editor-services-flutter-build/package.json deleted file mode 100644 index 33cb069b..00000000 --- a/editor-packages/editor-services-flutter-build/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "@code-editor/flutter-build", - "version": "0.0.0", - "private": false, - "description": "run flutter build command with webworker api", - "dependencies": {}, - "peerDependencies": {} -} \ No newline at end of file diff --git a/editor-packages/editor-services-flutter-build/workers/flutter.worker.js b/editor-packages/editor-services-flutter-build/workers/flutter.worker.js deleted file mode 100644 index dd2e2fd2..00000000 --- a/editor-packages/editor-services-flutter-build/workers/flutter.worker.js +++ /dev/null @@ -1,14 +0,0 @@ -const { spawn } = require("node:child_process"); -const build = spawn("flutter", "build", ["--no-source-maps"]); - -build.stdout.on("data", (data) => { - console.log(`stdout: ${data}`); -}); - -build.stderr.on("data", (data) => { - console.error(`stderr: ${data}`); -}); - -build.on("close", (code) => { - console.log(`child process exited with code ${code}`); -}); From 678ec5777709c0643ea243a13ec1ecb2e7cb8edd Mon Sep 17 00:00:00 2001 From: softmarshmallow Date: Wed, 27 Jul 2022 12:25:07 +0900 Subject: [PATCH 03/34] add flutter runner component --- .../app-runner/flutter-app-runner.tsx | 157 ++++++++++++------ editor/components/app-runner/index.ts | 1 - .../vanilla-dedicated-preview-renderer.tsx | 33 +++- 3 files changed, 130 insertions(+), 61 deletions(-) diff --git a/editor/components/app-runner/flutter-app-runner.tsx b/editor/components/app-runner/flutter-app-runner.tsx index 65d579be..58b0157c 100644 --- a/editor/components/app-runner/flutter-app-runner.tsx +++ b/editor/components/app-runner/flutter-app-runner.tsx @@ -1,65 +1,118 @@ -import React from "react"; -import { - buildFlutterFrameUrl, - FlutterFrameQuery, -} from "@base-sdk/base/dist/frame-embed"; -import { nanoid } from "nanoid"; -import { useEffect, useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; +import type { IScenePreviewDataFlutterPreview } from "core/states"; -const MAX_URL_LENGTH = 2048; -const DUE_TO_MAX_URL_LENGHT_THE_MAX_LENGTH_ACCEPTED_FOR_SRC = 1800; +const dartservices_html_src = "https://dartpad.dev/scripts/frame_dark.html"; -export function FlutterAppRunner(props: { - q: FlutterFrameQuery; - width: number | string; - height: number | string; -}) { - const [frameUrl, setFrameUrl] = useState(); +export function VanillaFlutterRunner({ + widgetKey, + loader, + source, +}: IScenePreviewDataFlutterPreview) { + switch (loader) { + case "vanilla-flutter-template": { + return ; + } + default: { + throw new Error(`Unsupported loader: ${loader}`); + } + } +} + +/** + * @see https://dartpad.dev/scripts/frame.js + * @returns + */ +function DartpadServedHtmlIframe({ js }: { js: string }) { + const [booting, setBooting] = useState(true); + const ref = useRef(); useEffect(() => { - if ( - props.q.src.length > DUE_TO_MAX_URL_LENGHT_THE_MAX_LENGTH_ACCEPTED_FOR_SRC - ) { - const id = nanoid(); - buildHostedSrcFrameUrl({ - id: id, - src: props.q.src, - }).then((r) => { - setFrameUrl(r); - }); - } else { - // use the efficient non-hosting option if possible - const _frameUrl = buildFlutterFrameUrl(props.q); - setFrameUrl(_frameUrl); - } - }, [props.q.src]); + window.addEventListener("message", (e) => { + const { sender, type } = e.data; + if (sender === "frame" && type === "ready") { + setBooting(false); + } + }); + }, []); - return frameUrl ? ( + useEffect(() => { + if (booting) return; + ref.current.contentWindow.postMessage( + { + addFirebaseJs: false, + addRequireJs: true, + command: "execute", + css: "", + destroyFrame: true, + html: "", + js: js, + }, + "*" + ); + }, [booting, js]); + + return (