/** * Cloudflare Workers preset for Sandlot. * * Creates a pre-configured Sandlot instance for Cloudflare Workers/Durable Objects. * * Key differences from browser/node presets: * - Requires static import of esbuild-wasm and its WASM binary * - No Tailwind support (tailwindcss-iso uses Vite-specific WASM loading) * - No executor by default (returns bundled code, execution is up to you) * * @example * ```ts * import "sandlot/workers/polyfill"; // Must be first! * import { createWorkersSandlot } from "sandlot/workers"; * import * as esbuild from "esbuild-wasm"; * import esbuildWasm from "esbuild-wasm/esbuild.wasm"; * * const sandlot = await createWorkersSandlot({ * esbuild, * wasmModule: esbuildWasm, * }); * * const sandbox = await sandlot.createSandbox(); * sandbox.writeFile("/index.ts", 'console.log("Hello!")'); * const result = await sandbox.build(); * // result.code contains the bundled JavaScript * ``` */ import { type EsmTypesResolverOptions } from "../core/esm-types-resolver"; import type { Sandlot, SandlotOptions } from "../types"; import { type WorkersBundlerOptions, type EsbuildModule } from "./bundler"; import { type TypecheckerOptions } from "../core/typechecker"; export interface CreateWorkersSandlotOptions extends Omit { /** * The esbuild-wasm module. * Import with: `import * as esbuild from "esbuild-wasm";` */ esbuild: EsbuildModule; /** * The pre-compiled WebAssembly.Module for esbuild. * Import with: `import esbuildWasm from "esbuild-wasm/esbuild.wasm";` */ wasmModule: WebAssembly.Module; /** * Custom bundler options (cdnBaseUrl). * You don't need to pass esbuild/wasmModule here - use the top-level options. */ bundler?: Omit; /** * Custom typechecker options, or a pre-configured typechecker instance. * Set to `false` to disable type checking. * @default Typechecker (enabled) */ typechecker?: TypecheckerOptions | SandlotOptions["typechecker"] | false; /** * Custom types resolver options, or a pre-configured resolver instance. * Set to `false` to disable type resolution. * @default EsmTypesResolver (enabled) */ typesResolver?: EsmTypesResolverOptions | SandlotOptions["typesResolver"] | false; } /** * Create a Sandlot instance pre-configured for Cloudflare Workers. * * This is a convenience function that sets up sensible defaults: * - WorkersBundler for bundling (requires static WASM import) * - Typechecker for type checking (uses process.browser polyfill) * - EsmTypesResolver for npm type resolution * - No executor (build-only, you handle execution) * - No Tailwind support (not compatible with Workers) * * IMPORTANT: You must import the polyfill before using this: * ```ts * import "sandlot/workers/polyfill"; * ``` * * @example Basic usage in a Durable Object * ```ts * import "sandlot/workers/polyfill"; * import { DurableObject } from "cloudflare:workers"; * import { createWorkersSandlot } from "sandlot/workers"; * import * as esbuild from "esbuild-wasm"; * import esbuildWasm from "esbuild-wasm/esbuild.wasm"; * * export class MySandbox extends DurableObject { * private sandlot; * private sandbox; * * constructor(ctx, env) { * super(ctx, env); * ctx.blockConcurrencyWhile(async () => { * this.sandlot = await createWorkersSandlot({ * esbuild, * wasmModule: esbuildWasm, * }); * this.sandbox = await this.sandlot.createSandbox(); * }); * } * * async runCode(code) { * this.sandbox.writeFile("/index.ts", code); * const result = await this.sandbox.build(); * if (result.success) { * return { code: result.code }; * } * return { error: result }; * } * } * ``` * * @example Disable type checking for faster initialization * ```ts * const sandlot = await createWorkersSandlot({ * esbuild, * wasmModule: esbuildWasm, * typechecker: false, * }); * ``` */ export declare function createWorkersSandlot(options: CreateWorkersSandlotOptions): Promise; //# sourceMappingURL=preset.d.ts.map