mirror of
https://github.com/storytold/storyteller-bevy.git
synced 2026-10-12 23:48:57 +00:00
cba70a62ae
This commit implements a Sketchfab-style single-object viewer as a minimal proof-of-concept. ### `@storyteller/studio-web` This is a new package to house web components for interfacing with the `@storyteller/studio` WASM library. It currently includes a single component, `<sts-viewer />`, which is exported from `@storyteller/studio-web/viewer`. ### `react-frontend` This is a new application intended as a proof-of-concept and testbed for React interop with `@storyteller/studio-web`. Web components are currently a little bit fiddly to use in a React application. `react-frontend/src/app/studio-viewer.tsx` demonstrates how a React-idiomatic component can be written as a thin wrapper around a web component, and `react-frontend/src/app/app.tsx` demonstrates that wrapper component in use.
26 lines
710 B
TypeScript
26 lines
710 B
TypeScript
import fs from "fs";
|
|
import {NormalizedOutputOptions} from "rollup";
|
|
|
|
function copyRecursively(src: string, dst: string) {
|
|
if (fs.statSync(src).isDirectory()) {
|
|
// folder
|
|
if (!fs.existsSync(dst)) {
|
|
fs.mkdirSync(dst);
|
|
}
|
|
for (const file of fs.readdirSync(src)) {
|
|
copyRecursively(src + "/" + file, dst + "/" + file);
|
|
}
|
|
} else {
|
|
// file
|
|
fs.copyFileSync(src, dst);
|
|
}
|
|
}
|
|
|
|
export function buildMiddleWare(options: NormalizedOutputOptions, assets: string[] = []) {
|
|
const dst = options.dir;
|
|
if (!dst) throw new Error("options.dir is undefined");
|
|
for (const dir of assets) {
|
|
copyRecursively(dir, dst)
|
|
}
|
|
}
|