UNPKG

@sanity/ui-workshop

Version:

An environment for designing, reviewing, and quality-testing React components.

1 lines 24.8 kB
{"version":3,"file":"runtime.cjs","sources":["../src/runtime/lib/_fileExists.ts","../src/runtime/config/_findRuntimeFile.ts","../src/runtime/config/_loadRuntime.ts","../src/runtime/constants.ts","../src/runtime/lib/_getFiles.ts","../src/runtime/runtime/_compileModule.ts","../src/runtime/runtime/_writeFrameHTML.ts","../src/runtime/runtime/_writeFrameScript.ts","../src/runtime/runtime/_writeHTML.ts","../src/runtime/runtime/_writeScript.ts","../src/runtime/runtime/buildStaticFiles.ts","../src/runtime/viteConfig.ts","../src/runtime/build.ts","../src/runtime/lib/_watchFiles.ts","../src/runtime/_watchScopes.ts","../src/runtime/devServer/createDevServer.ts","../src/runtime/dev.ts"],"sourcesContent":["import {accessSync} from 'fs'\n\n/** @internal */\nexport function _fileExists(file: string): boolean {\n try {\n accessSync(file)\n\n return true\n } catch (_) {\n return false\n }\n}\n","import path from 'path'\n\nimport {_fileExists} from '../lib/_fileExists'\n\nconst RUNTIME_FILE_NAMES = [\n 'workshop.runtime.js',\n 'workshop.runtime.jsx',\n 'workshop.runtime.mjs',\n 'workshop.runtime.cjs',\n 'workshop.runtime.ts',\n 'workshop.runtime.tsx',\n]\n\n/** @internal */\nexport function _findRuntimeFile(options: {packagePath: string}): string | undefined {\n const {packagePath} = options\n\n for (const f of RUNTIME_FILE_NAMES) {\n const file = path.resolve(packagePath, f)\n\n if (_fileExists(file)) return file\n }\n\n return undefined\n}\n","import {WorkshopRuntimeOptions} from '@sanity/ui-workshop'\nimport {TransformOptions} from 'esbuild'\n\nimport {_findRuntimeFile} from './_findRuntimeFile'\n\n/** @internal */\nexport async function _loadRuntime(options: {\n packagePath: string\n}): Promise<WorkshopRuntimeOptions | undefined> {\n const {packagePath} = options\n\n const configPath = _findRuntimeFile({packagePath})\n\n if (!configPath) {\n return undefined\n }\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const {register} = require('esbuild-register/dist/node')\n\n const eslintOptions: TransformOptions = {\n // eslint options\n jsx: 'automatic',\n jsxFactory: 'createElement',\n jsxFragment: 'Fragment',\n jsxImportSource: 'react',\n logLevel: 'silent',\n }\n\n const {unregister} = globalThis.__DEV__ ? {unregister: () => undefined} : register(eslintOptions)\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const config = require(configPath)\n\n // Unregister the require hook if you don't need it anymore\n unregister()\n\n return config?.default || config\n}\n","export const DEFAULT_PATTERN = [\n 'src/**/__workshop__/index.js',\n 'src/**/__workshop__/index.jsx',\n 'src/**/__workshop__/index.ts',\n 'src/**/__workshop__/index.tsx',\n]\n","import globby from 'globby'\nimport path from 'path'\n\nimport {_Observable} from './_observable'\n\nexport function _getFiles(options: {\n cwd: string\n pattern: string | string[]\n}): _Observable<string[]> {\n const {cwd, pattern} = options\n\n return {\n subscribe(observer) {\n globby(pattern, {cwd}).then((files) => {\n observer.next(files.map((f) => path.resolve(cwd, f)))\n })\n\n return {\n unsubscribe() {\n //\n },\n }\n },\n }\n}\n","import chokidar from 'chokidar'\n\ndeclare global {\n // eslint-disable-next-line no-var\n var $workshopWatcher: chokidar.FSWatcher | undefined\n}\n\nfunction _sanitizeModulePath(modulePath: string) {\n return modulePath.replace(/\\.[^/.]+$/, '').replace(/\\/index$/, '')\n}\n\nexport function _compileModule(paths: string[]): string {\n if (paths.length === 0) {\n return `// THIS FILE IS AUTO-GENERATED\\n\\nexport const scopes = []\\n`\n }\n\n const sortedPaths = paths.sort()\n const imports = sortedPaths\n .map((p, idx) => `import _${idx} from '${_sanitizeModulePath(p)}'`)\n .join('\\n')\n const exports = sortedPaths.map((_p, idx) => ` _${idx}`).join(',\\n')\n const code =\n [`// THIS FILE IS AUTO-GENERATED`, imports, `export const scopes = [\\n${exports},\\n]`].join(\n '\\n\\n',\n ) + `\\n`\n\n return code\n}\n","import {writeFile} from 'fs/promises'\nimport path from 'path'\n\nconst HTML = `<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta\n name=\"viewport\"\n content=\"minimum-scale=1, initial-scale=1, width=device-width, shrink-to-fit=no, viewport-fit=cover\"\n />\n <style>\n html {\n -webkit-text-size-adjust: 100%;\n text-size-adjust: 100%;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-smoothing: antialiased;\n }\n html,\n body,\n #root {\n height: 100%;\n margin: 0;\n }\n </style>\n </head>\n <body>\n <div id=\"root\"></div>\n <script>\n if (window.parent !== window) {\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__ = window.parent.__REACT_DEVTOOLS_GLOBAL_HOOK__\n }\n </script>\n <script type=\"module\" src=\"/.workshop/frame/main.tsx\"></script>\n </body>\n</html>\n`\n\nexport async function _writeFrameHTML(options: {outDir: string}): Promise<void> {\n await writeFile(path.resolve(options.outDir, 'frame/index.html'), HTML)\n}\n","import {writeFile} from 'fs/promises'\nimport path from 'path'\n\nconst SCRIPT = `// THIS FILE IS AUTO-GENERATED\n\nimport {mountFrame} from '@sanity/ui-workshop'\nimport {scopes} from '../scopes'\nimport config from '../../workshop.config'\n\nmountFrame({\n config: {...config, scopes},\n element: document.getElementById('root'),\n})\n`\n\nexport async function _writeFrameScript(options: {outDir: string}): Promise<void> {\n await writeFile(path.resolve(options.outDir, 'frame/main.tsx'), SCRIPT)\n}\n","import {writeFile} from 'fs/promises'\nimport path from 'path'\n\nconst HTML = `<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta\n name=\"viewport\"\n content=\"minimum-scale=1, initial-scale=1, width=device-width, shrink-to-fit=no, viewport-fit=cover\"\n />\n <style>\n html {\n -webkit-text-size-adjust: 100%;\n text-size-adjust: 100%;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-smoothing: antialiased;\n }\n html,\n body,\n #root {\n height: 100%;\n margin: 0;\n }\n </style>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/.workshop/main.tsx\"></script>\n </body>\n</html>\n`\n\nexport async function _writeHTML(options: {outDir: string}): Promise<void> {\n await writeFile(path.resolve(options.outDir, 'index.html'), HTML)\n}\n","import {writeFile} from 'fs/promises'\nimport path from 'path'\n\nconst SCRIPT = `// THIS FILE IS AUTO-GENERATED\n\nimport {mount} from '@sanity/ui-workshop'\nimport {scopes} from './scopes'\nimport config from '../workshop.config'\n\nmount({\n config: {...config, scopes},\n element: document.getElementById('root'),\n})\n`\n\nexport async function _writeScript(options: {outDir: string}): Promise<void> {\n await writeFile(path.resolve(options.outDir, 'main.tsx'), SCRIPT)\n}\n","import mkdirp from 'mkdirp'\nimport path from 'path'\n\nimport {_writeFrameHTML} from './_writeFrameHTML'\nimport {_writeFrameScript} from './_writeFrameScript'\nimport {_writeHTML} from './_writeHTML'\nimport {_writeScript} from './_writeScript'\n\nexport async function buildStaticFiles(options: {runtimeDir: string}): Promise<void> {\n const {runtimeDir} = options\n\n await mkdirp(runtimeDir)\n await _writeHTML({outDir: runtimeDir})\n await _writeScript({outDir: runtimeDir})\n\n await mkdirp(path.resolve(runtimeDir, 'frame'))\n await _writeFrameHTML({outDir: runtimeDir})\n await _writeFrameScript({outDir: runtimeDir})\n}\n","import react from '@vitejs/plugin-react'\nimport path from 'path'\nimport {UserConfig} from 'vite'\n\n/** @internal */\nexport function createViteConfig(options: {\n cwd: string\n outDir: string\n runtimeDir: string\n}): UserConfig {\n const {cwd, outDir, runtimeDir} = options\n\n return {\n build: {\n outDir,\n rollupOptions: {\n input: {\n main: path.resolve(runtimeDir, 'index.html'),\n frame: path.resolve(runtimeDir, 'frame/index.html'),\n },\n },\n },\n optimizeDeps: {\n esbuildOptions: {\n jsx: 'automatic',\n },\n },\n plugins: [\n react({\n babel: {plugins: [['babel-plugin-react-compiler', {target: '19'}]]},\n }),\n ],\n root: cwd,\n }\n}\n","import cpx from 'cpx'\nimport {writeFile} from 'fs/promises'\nimport path from 'path'\nimport rimraf from 'rimraf'\nimport {build as viteBuild} from 'vite'\n\nimport {_loadRuntime} from './config/_loadRuntime'\nimport {DEFAULT_PATTERN} from './constants'\nimport {_getFiles} from './lib/_getFiles'\nimport {_compileModule} from './runtime/_compileModule'\nimport {buildStaticFiles} from './runtime/buildStaticFiles'\nimport {createViteConfig} from './viteConfig'\n\nfunction getScopes(options: {cwd: string; pattern: string | string[]}): Promise<string[]> {\n return new Promise((resolve) => {\n const files$ = _getFiles(options)\n\n files$.subscribe({\n next: resolve,\n })\n })\n}\n\n/** @alpha */\nexport async function build(options: {cwd: string}): Promise<void> {\n const {cwd} = options\n const runtime = await _loadRuntime({packagePath: cwd})\n const runtimeDir = path.resolve(cwd, '.workshop')\n const outDir = runtime?.build?.outDir || path.resolve(cwd, 'dist')\n\n await buildStaticFiles({runtimeDir})\n\n const scopes = await getScopes({\n cwd,\n pattern: runtime?.pattern || DEFAULT_PATTERN,\n })\n\n const relativeScopes = scopes.map((f) => {\n return path.relative(outDir, f)\n })\n\n const code = _compileModule(relativeScopes)\n\n await writeFile(path.resolve(runtimeDir, 'scopes.ts'), code)\n\n const baseViteConfig = createViteConfig({cwd, outDir, runtimeDir})\n\n let viteConfig = runtime?.vite?.(baseViteConfig) || baseViteConfig\n\n // check if viteConfig is a promise\n if (typeof viteConfig === 'object' && 'then' in viteConfig) {\n viteConfig = await viteConfig\n }\n\n await viteBuild(viteConfig)\n\n // copy\n cpx.copySync(path.resolve(outDir, '.workshop', '**/*'), outDir)\n\n await rimraf(path.resolve(outDir, '.workshop'))\n}\n","import chokidar from 'chokidar'\nimport path from 'path'\n\nimport {_Observable} from './_observable'\n\nexport interface _FileEvent {\n type: 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir'\n file: string\n}\n\nexport function _watchFiles(options: {\n cwd: string\n pattern: string | string[]\n}): _Observable<_FileEvent> {\n const {cwd, pattern} = options\n\n return {\n subscribe(observer) {\n const watcher = chokidar.watch(pattern, {\n cwd,\n ignoreInitial: true,\n })\n\n watcher.on('all', (event, file) => {\n observer.next({type: event, file: path.resolve(cwd, file)})\n })\n\n return {\n unsubscribe() {\n watcher.close()\n },\n }\n },\n }\n}\n","import {_getFiles} from './lib/_getFiles'\nimport {_Observable} from './lib/_observable'\nimport {_watchFiles} from './lib/_watchFiles'\n\nexport function _watchScopes(options: {\n cwd: string\n pattern: string | string[]\n}): _Observable<string[]> {\n return {\n subscribe(observer) {\n const initialFiles$ = _getFiles(options)\n const fileEvent$ = _watchFiles(options)\n\n let files: string[]\n\n const initialFilesSub = initialFiles$.subscribe({\n next(initialFiles) {\n files = initialFiles\n\n observer.next(files)\n },\n })\n\n const fileEventSub = fileEvent$.subscribe({\n next(event) {\n if (event.type === 'add') {\n files.push(event.file)\n\n observer.next(files)\n }\n\n if (event.type === 'unlink') {\n const idx = files.indexOf(event.file)\n\n if (idx) {\n files.splice(idx, 1)\n\n observer.next(files)\n }\n }\n },\n })\n\n return {\n unsubscribe() {\n initialFilesSub.unsubscribe()\n fileEventSub.unsubscribe()\n },\n }\n },\n }\n}\n","import type {WorkshopRuntimeOptions} from '@sanity/ui-workshop'\nimport express from 'express'\nimport {readFile} from 'fs/promises'\nimport path from 'path'\nimport {createServer as createViteServer, InlineConfig} from 'vite'\n\nimport {createViteConfig} from '../viteConfig'\n\nexport async function createDevServer(options: {\n cwd: string\n outDir: string\n runtime?: WorkshopRuntimeOptions\n runtimeDir: string\n}): Promise<express.Application> {\n const {cwd, outDir, runtime, runtimeDir} = options\n\n const baseViteConfig: InlineConfig = {\n ...createViteConfig({cwd, outDir, runtimeDir}),\n appType: 'custom', // don't include HTML middlewares\n configFile: false,\n logLevel: 'info',\n server: {middlewareMode: true},\n }\n\n let viteConfig = runtime?.vite?.(baseViteConfig) || baseViteConfig\n\n // check if viteConfig is a promise\n if (typeof viteConfig === 'object' && 'then' in viteConfig) {\n viteConfig = await viteConfig\n }\n\n const vite = await createViteServer(viteConfig)\n\n const app = express()\n\n app.use(vite.middlewares)\n\n app.use('*all', async (req, res) => {\n const url = req.originalUrl\n\n let htmlPath = 'index.html'\n\n if (req.path === '/frame/') {\n htmlPath = 'frame/index.html'\n }\n\n try {\n const template = await readFile(path.resolve(runtimeDir, htmlPath), 'utf-8')\n const html = await vite.transformIndexHtml(url, template)\n\n res.status(200).set({'Content-Type': 'text/html'}).send(html)\n } catch (e) {\n if (e instanceof Error) {\n // Let Vite fix the stack trace\n vite.ssrFixStacktrace(e)\n // eslint-disable-next-line no-console\n console.log(e.stack)\n res.status(500).end(e.stack)\n } else {\n res.status(500).end(String(e))\n }\n }\n })\n\n return app\n}\n","/* eslint-disable no-console */\n\nimport fs from 'fs'\nimport path from 'path'\n\nimport {_watchScopes} from './_watchScopes'\nimport {_loadRuntime} from './config/_loadRuntime'\nimport {DEFAULT_PATTERN} from './constants'\nimport {createDevServer} from './devServer'\nimport {_compileModule} from './runtime/_compileModule'\nimport {buildStaticFiles} from './runtime/buildStaticFiles'\n\n/** @alpha */\nexport async function dev(options: {cwd: string}): Promise<void> {\n const {cwd} = options\n const runtime = await _loadRuntime({packagePath: cwd})\n const runtimeDir = path.resolve(cwd, '.workshop')\n const outDir = path.resolve(cwd, 'dist')\n\n await buildStaticFiles({runtimeDir})\n\n const scopes$ = _watchScopes({\n cwd,\n pattern: runtime?.pattern || DEFAULT_PATTERN,\n })\n\n // Write scopes\n const scopesSub = scopes$.subscribe({\n next: (scopes) => {\n const relativeScopes = scopes.map((f) => {\n return path.relative(runtimeDir, f)\n })\n\n const code = _compileModule(relativeScopes)\n\n fs.writeFileSync(path.resolve(runtimeDir, 'scopes.ts'), code)\n },\n })\n\n const app = await createDevServer({cwd, outDir, runtime, runtimeDir})\n\n const port = runtime?.server?.port || 1337\n\n const server = app.listen(port, () => {\n console.log(`listening on http://localhost:${port}`)\n })\n\n server.on('close', () => {\n console.log(`server closed`)\n\n scopesSub.unsubscribe()\n\n process.exit(1)\n })\n}\n"],"names":["_fileExists","file","accessSync","RUNTIME_FILE_NAMES","_findRuntimeFile","options","packagePath","f","path","resolve","_loadRuntime","configPath","register","require","eslintOptions","jsx","jsxFactory","jsxFragment","jsxImportSource","logLevel","unregister","globalThis","__DEV__","undefined","config","default","DEFAULT_PATTERN","_getFiles","cwd","pattern","subscribe","observer","globby","then","files","next","map","unsubscribe","_sanitizeModulePath","modulePath","replace","_compileModule","paths","length","sortedPaths","sort","imports","p","idx","join","exports","_p","HTML","_writeFrameHTML","writeFile","outDir","SCRIPT","_writeFrameScript","_writeHTML","_writeScript","buildStaticFiles","runtimeDir","mkdirp","createViteConfig","build","rollupOptions","input","main","frame","optimizeDeps","esbuildOptions","plugins","react","babel","target","root","getScopes","Promise","runtime","relativeScopes","relative","code","baseViteConfig","viteConfig","vite","viteBuild","cpx","copySync","rimraf","_watchFiles","watcher","chokidar","watch","ignoreInitial","on","event","type","close","_watchScopes","initialFiles$","fileEvent$","initialFiles","fileEventSub","push","indexOf","splice","createDevServer","appType","configFile","server","middlewareMode","createViteServer","app","express","use","middlewares","req","res","url","originalUrl","htmlPath","template","readFile","html","transformIndexHtml","status","set","send","e","Error","ssrFixStacktrace","console","log","stack","end","String","dev","scopesSub","scopes","fs","writeFileSync","port","listen","process","exit"],"mappings":"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"}