From f13a4ac2c2480df0d4bc592a8eecc8aa2c4b82bb Mon Sep 17 00:00:00 2001 From: Severin Ibarluzea Date: Fri, 12 Sep 2025 21:34:13 -0700 Subject: [PATCH] test: ensure project config overrides platform defaults --- lib/runner/CircuitRunner.ts | 15 ++++++++++++--- lib/shared/types.ts | 5 +++++ lib/worker.ts | 14 ++++++++++++-- tests/features/project-config.test.tsx | 23 +++++++++++++++++++++++ 4 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 tests/features/project-config.test.tsx diff --git a/lib/runner/CircuitRunner.ts b/lib/runner/CircuitRunner.ts index 63b2836..cb739a3 100644 --- a/lib/runner/CircuitRunner.ts +++ b/lib/runner/CircuitRunner.ts @@ -11,6 +11,7 @@ import * as React from "react" import { importEvalPath } from "webworker/import-eval-path" import { setupDefaultEntrypointIfNeeded } from "./setupDefaultEntrypointIfNeeded" import Debug from "debug" +import { getPlatformConfig } from "../getPlatformConfig" const debug = Debug("tsci:eval:CircuitRunner") @@ -28,6 +29,14 @@ export class CircuitRunner implements CircuitRunnerApi { Object.assign(this._circuitRunnerConfiguration, configuration) } + private _getPlatformConfig(): PlatformConfig { + return { + ...getPlatformConfig(), + ...this._circuitRunnerConfiguration.platform, + ...this._circuitRunnerConfiguration.projectConfig, + } + } + async version(): Promise { return "0.0.0" } @@ -62,7 +71,7 @@ export class CircuitRunner implements CircuitRunnerApi { this._circuitRunnerConfiguration, { name: opts.name, - platform: this._circuitRunnerConfiguration.platform, + platform: this._getPlatformConfig(), debugNamespace: this._debugNamespace, }, ) @@ -94,7 +103,7 @@ export class CircuitRunner implements CircuitRunnerApi { this._circuitRunnerConfiguration, { ...opts, - platform: this._circuitRunnerConfiguration.platform, + platform: this._getPlatformConfig(), debugNamespace: this._debugNamespace, }, ) @@ -114,7 +123,7 @@ export class CircuitRunner implements CircuitRunnerApi { this._circuitRunnerConfiguration, { ...opts, - platform: this._circuitRunnerConfiguration.platform, + platform: this._getPlatformConfig(), debugNamespace: this._debugNamespace, }, ) diff --git a/lib/shared/types.ts b/lib/shared/types.ts index 80c1b67..2a65a6f 100644 --- a/lib/shared/types.ts +++ b/lib/shared/types.ts @@ -4,11 +4,16 @@ import type { PlatformConfig } from "@tscircuit/props" export type RootCircuitEventName = CoreRootCircuitEventName | "debug:logOutput" +export interface ProjectConfig { + projectBaseUrl?: string +} + export interface CircuitRunnerConfiguration { snippetsApiBaseUrl: string cjsRegistryUrl: string verbose?: boolean platform?: PlatformConfig + projectConfig?: ProjectConfig } export interface WebWorkerConfiguration extends CircuitRunnerConfiguration { diff --git a/lib/worker.ts b/lib/worker.ts index c204ebb..c032aff 100644 --- a/lib/worker.ts +++ b/lib/worker.ts @@ -6,6 +6,7 @@ import type { CircuitWebWorker, } from "./shared/types" import type { RootCircuitEventName } from "./shared/types" +import { getPlatformConfig } from "./getPlatformConfig" export type { CircuitWebWorker, WebWorkerConfiguration } @@ -170,8 +171,17 @@ export const createCircuitWebWorker = async ( if (configuration.snippetsApiBaseUrl) { await comlinkWorker.setSnippetsApiBaseUrl(configuration.snippetsApiBaseUrl) } - if (configuration.platform) { - await comlinkWorker.setPlatformConfig(configuration.platform) + const finalPlatformConfig = + configuration.platform || configuration.projectConfig + ? { + ...getPlatformConfig(), + ...configuration.platform, + ...configuration.projectConfig, + } + : undefined + + if (finalPlatformConfig) { + await comlinkWorker.setPlatformConfig(finalPlatformConfig) } let isTerminated = false diff --git a/tests/features/project-config.test.tsx b/tests/features/project-config.test.tsx new file mode 100644 index 0000000..4aa0309 --- /dev/null +++ b/tests/features/project-config.test.tsx @@ -0,0 +1,23 @@ +import { CircuitRunner } from "lib/runner/CircuitRunner" +import { expect, test } from "bun:test" + +test("project configuration overrides platform defaults", async () => { + const runner = new CircuitRunner({ + projectConfig: { projectBaseUrl: "https://example.com/assets" }, + }) + + await runner.execute(` + circuit.add( + + + + ) + `) + + await runner.renderUntilSettled() + const circuit = (globalThis as any).__tscircuit_circuit + expect(circuit.platform?.projectBaseUrl).toBe("https://example.com/assets") + expect(circuit.platform?.partsEngine).toBeDefined() + + await runner.kill() +})