UNPKG

@ndbx/runtime

Version:

The `@ndbx/runtime` package provides a runtime environment to embed NodeBox visualizations directly into React applications. NodeBox is a powerful tool for creating interactive and generative visualizations, and this runtime allows you to integrate those

80 lines (73 loc) 2.87 kB
import { babel } from "@rollup/plugin-babel"; import commonjs from "@rollup/plugin-commonjs"; import { nodeResolve } from "@rollup/plugin-node-resolve"; import typescript from "@rollup/plugin-typescript"; import { globSync } from "glob"; import fs from "fs"; import path from "path"; function ensureDirectory(...segments) { const dir = path.join(...segments); if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } return dir; } const functionsToJSON = () => { return { name: "functions-to-json", buildStart() { const pattern = path.resolve("functions", "**/*.js"); const files = globSync(pattern, { windowsPathsNoEscape: true }); files.forEach((file) => { this.addWatchFile(file); }); }, async generateBundle(libraryName) { function generateProject(projectName) { const project = { formatVersion: 1, title: projectName, dependencies: {}, assets: {}, items: [] }; const pattern = path.resolve("functions", projectName, "*.js"); const files = globSync(pattern, { windowsPathsNoEscape: true }); let id = 1; files .sort((a, b) => a.localeCompare(b)) .forEach((file) => { let slug = path.basename(file, ".js"); const name = slug.replace(/-/g, " ").replace(/\b\w/g, (char) => char.toUpperCase()); const source = fs.readFileSync(file, "utf-8"); project.items.push({ type: "FUNCTION", id: `0:${id++}`, name, source }); }); const projectDirectory = ensureDirectory("..", "server", "data", "core", projectName); const projectFile = path.join(projectDirectory, "project.json"); fs.writeFileSync(projectFile, JSON.stringify(project, null, 2)); const publishedDirectory = ensureDirectory("..", "server", "data", "core", projectName, "versions"); const publishedProjectFile = path.join(publishedDirectory, "published.json"); fs.writeFileSync(publishedProjectFile, JSON.stringify(project, null, 2)); const libDirectory = ensureDirectory("..", "server", "data", "core", projectName, "lib"); const utilitySource = fs.readFileSync(path.resolve("functions", projectName, "utilities.js")); fs.writeFileSync(path.join(libDirectory, "utilities.js"), utilitySource); } generateProject("g"); generateProject("plot"); }, }; }; export default { input: "src/index.ts", output: [ { file: "dist/ndbx.esm.js", format: "esm", sourcemap: true, }, ], plugins: [ nodeResolve({ browser: true }), // Resolves third-party modules in node_modules babel({ babelHelpers: "bundled" }), // Transpiles JavaScript using Babel commonjs({ requireReturnsDefault: "auto", }), typescript(), functionsToJSON(), ], external: ["react", "react-dom"], };